泉州网站建设论坛,c 网站开发框架有,科技助手,揭阳网站制作案例和为 s 的两个数字 文章目录 和为 s 的两个数字题目描述算法思路暴力枚举双指针 代码编写Java代码C代码编写 LCR 179. 查找总价格为目标值的两个商品 - 力扣#xff08;LeetCode#xff09; 题目描述
购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品…和为 s 的两个数字 文章目录 和为 s 的两个数字题目描述算法思路暴力枚举双指针 代码编写Java代码C代码编写 LCR 179. 查找总价格为目标值的两个商品 - 力扣LeetCode 题目描述
购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况返回任一结果即可。
示例 1
输入price [3, 9, 12, 15], target 18
输出[3,15] 或者 [15,3]示例 2
输入price [8, 21, 27, 34, 52, 66], target 61
输出[27,34] 或者 [34,27]提示
1 price.length 10^51 price[i] 10^61 target 2*10^6
算法思路
暴力枚举
两层for循环即可解决但是应该会超时~
class Solution {public int[] twoSum(int[] price, int target) {for(int i 0; i price.length ; i)for(int j i 1; j price.length; j)if(price[i] price[j] target)return new int[]{price[i],price[j]};return new int[]{0};}
}双指针
思路就是咱分别定义left right两个指针分别位于有序数组的两边。
然后我们将left、 right两个指针相加那么此时就会出现三种情况
我们定义两个指针的和是sum
sum targrt那就将leftsum target那就将right--sum target直接return
代码编写
Java代码
class Solution {public int[] twoSum(int[] price, int target) {int left 0, right price.length - 1;while(left right){int sum price[left] price[right];if(sum target) right--;else if(sum target) left;else return new int[]{price[left], price[right]};}return new int[]{-1};}
}C代码编写
class Solution {
public:vectorint twoSum(vectorint price, int target) {int left 0, right price.size() - 1;while(left right){int sum price[left] price[right];if(sum target) left;else if(sum target) right--;else return {price[left], price[right]};}return {-1,0};}
};