2023年2月27日 星期一

167. Two Sum II - Input Array Is Sorted

解題思路

因為 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;
    }
};

沒有留言:

張貼留言