题解 | #和为S的两个数字#

和为S的两个数字

https://www.nowcoder.com/practice/390da4f7a00f44bea7c2f3d19491311b

class Solution {
  public:
    vector<int> FindNumbersWithSum(vector<int> array, int sum) {
        vector<int> v;
        if (sum == 0) {
            return v;
        }
        int left = 0, right = array.size();
        for (int i = 0; i < array.size() - 1 && array[i] < sum; ++i) {
            // 查找第二个数时使用二分查找减少时间复杂度
            int left = i + 1, right = array.size() - 1;
            while (left <= right) {
                int mid = (left + right) / 2;
                if (array[mid] < sum - array[i]) {
                    left = mid + 1;
                } else if (array[mid] > sum - array[i]) {
                    right = mid - 1;
                } else {
                    v.push_back(array[i]);
                    v.push_back(array[mid]);
                    return v;
                }
            }
        }
        return v;
    }
};

全部评论

相关推荐

LXXXXd:有点杂,想搞自动化的话没必要把法律的经历写上去
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务