解題思路
因為 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; } };
沒有留言:
張貼留言