JZ42 和为S的两个数字

JZ42 和为S的两个数字

题目描述

点这里

思路分析

做法很多。最好的做法是双指针。(其他不是最优的做法有:哈希,二分等等)

反向双指针遍历。和小了就小指针右移,和大了就大指针左移。同时更新答案。

代码实现

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        int num1=0,num2=0;
        int l=0,r=array.size()-1;
        while(l<r){
            if(array[l]+array[r]==sum){
                if(!num1&&!num2||array[l]*array[r]<num1*num2) num1=array[l],num2=array[r];
                r--;
            }
            else if(array[l]+array[r]>sum){
                r--;
            }
            else {
                l++;
            }
        }
        vector<int> res;
        if(num1&&num2) res.push_back(num1),res.push_back(num2);
        return res;
    }
};
上一篇:js的基础


下一篇:把数字翻译成字符串