[LeetCode]167. Two Sum II - Input array is sorted
题目描述
思路
开始的思路是暴力解,虽然用例都通过了,但是超时了
看了超时的用例,发现是太多重复造成的
于是加了重复检测的条件判断,提交通过之后发现速度太慢
换一种思路
两个指针从数组两边同时向中间移动,如果数字之和小于目标,则移动左指针,否则移动右指针
代码
注释部分为暴力解法
#include <iostream>
#include <vector>
using namespace std;
class Solution {
public:
/*
vector<int> twoSum(vector<int>& numbers, int target) {
int current, next;
vector <int> res;
bool finded = false;
for (current = 0; current < numbers.size(); ++ current) {
next = current + 1;
finded = false;
for (; next < numbers.size(); ++next) {
if (numbers[current] + numbers[next] == target) {
finded = true;
res.push_back(current + 1);
res.push_back(next + 1);
break;
}
}
if (finded)
break;
if (numbers[current] == numbers[next]) {
++current;
continue;
}
}
return res;
}
*/
vector<int> twoSum(vector<int>& numbers, int target) {
int low = 0, high = numbers.size() - 1;
vector<int> res;
while (numbers[low] + numbers[high] != target) {
if (numbers[low] + numbers[high] < target) {
++low;
}
else {
--high;
}
}
res.push_back(low + 1);
res.push_back(high + 1);
return res;
}
};
int main() {
vector<int> nums = { 0, 0, 3, 4 }, res;
Solution s;
res = s.twoSum(nums, 0);
for (int p : res) {
cout << p << " ";
}
system("pause");
}