Question:
Similar to Question [1. Two Sum], except that the input array is already sorted in
ascending order.
solution1
使用兩個下標,一個i=0,一個j=nums.size();從後往前計算
//做出來還是挺開心的,問題代碼可太複雜了,答案是簡化了一波,感覺很優秀了
vector<int> twoSum(vector<int>& nums, int target)
{
unordered_map<int, int> map;
vector<int> ret;
int j = nums.size()-1;
int len = nums.size()%2;
if (len == 1)
len = nums.size() / 2 + 1;
else
len = nums.size() / 2;
for (int i = 0; i < len; i++)
{
while (nums[i] + nums[j] > target)
{
j--;
}
if (nums[i] + nums[j] == target)
{
//cout << i << " " << j << endl;
ret.push_back(i);
ret.push_back(j);
}
}
return ret;
}
//answer
vector<int> twoSum(vector<int>& nums, int target)
{
vector<int> ret;
int j = nums.size() - 1;
int i = 0;
while (i < j)
{
if (nums[i] + nums[j] == target)
{
//cout << i << " " << j << endl;
ret.push_back(i);
ret.push_back(j);
i++;
}
else if (nums[i] + nums[j] > target)
j--;
else
i++;
}
return ret;
}
solution 2
對於有序的數組,查找效率想要高一點,考慮二分查找。
在這裏插入代碼片