一、题目解析
只需在这个数组中找出两个数相加等于target即可
二、算法原理
1、暴力解法(时间复杂度:O(n^2))
两个for循环嵌套遍历这个数组即可,不过会超时
class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int n = price.size();for(int i = 0; i < n; i++){for(int j = i + 1; j < n; j++){if(price[i] + price[j] == target){return {price[i], price[j]};}}}return {-1,-1};}
};
说明一下c++中是支持这样返回的,并且最后没找到的话也要返回一个数值,因为力扣编译器的缘故,必须得要有值返回否则力扣编译器会报错。
2、双指针(时间复杂度:O(n))
因为题目中的升序条件,所以这题可以用双指针来做。
情况一:sum = left + right > target ——> right--
情况二:sum = left + right < target ——> left++
情况三:sum = left + right == target
返回结果就行了
三、代码编写
class Solution {
public:vector<int> twoSum(vector<int>& price, int target) {int left = 0, right = price.size() - 1;while(left < right){int sum = price[left] + price[right]; if(sum > target) right--;else if(sum < target) left++;else return {price[left], price[right]};}return {-1,-1};}
};