天天看點

leetcode--雙指針1(167題/easy/cpp)leetcode

leetcode

按照子產品刷題,點選進入使用的刷題目錄

雙指針

1.兩數之和 II - 輸入有序數組

題幹:

167.兩數之和 II - 輸入有序數組

解題思路: i,j分别指向數組第一個元素和最後一個元素,若兩者相加>target則–j;<target則++i;最後傳回{i+1,j+1}

代碼:

class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        for(int i=0,j=numbers.size()-1;i<j;){
            if(numbers[i]+numbers[j]>target){
                --j;
            }
            else if(numbers[i]+numbers[j]<target){
                ++i;
            }
            else{
                return{i+1,j+1};
            }
        }
        return{};
    }
};
           

改進: 可以使用while循環代替for循環,即改為while (i < j)