解題思路
因為 sorted array 的特性,選擇用 two pointer 來解。
當 left pointer 往右移,代表數字總和會變大;當 right pointer 往左移,代表數字總和會變小。由於一定能找到解,因此就不斷重述這樣的動作,查看當下兩個 pointer 的數字和並跟 target 比較,一直到找到為止。
程式碼
class Solution {
public:
vector<int> twoSum(vector<int>& numbers, int target) {
int left = 0, right = numbers.size() - 1;
while((numbers[left] + numbers[right]) != target)
{
if((numbers[left] + numbers[right]) > target)
right--;
else
left++;
}
vector<int> ans;
ans.push_back(left + 1);
ans.push_back(right + 1);
return ans;
}
};
沒有留言:
張貼留言