一、题目解析
只需在这个数组中找出两个数相加等于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};
}
};