和为S的两个数字

  1. 题目描述
  2. 思路
    1. 双指针法

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:

对应每个测试案例,输出两个数,小的先输出。

思路

双指针法

  • 乘积最小,两个数之间的差值越大,乘积越小
  • 两个指针,一个指向头,一个指向尾
  • 和太小,头指针后移,和太大,尾指针前移
  • 循环遍历,直到找到第一组值

也可以枚举暴力遍历,查找满足条件的、乘积最小的

class Solution {
public:
    vector<int> FindNumbersWithSum(vector<int> array,int sum) {
        vector<int> res;
        int lenght = array.size();
        // 二分查找❌,滑动窗口
        int a = 0;
        int b = lenght - 1;
        while (a < b){
            int curSum = array[a] + array[b];
            if (curSum == sum) {
                res.push_back(array[a]);
                res.push_back(array[b]);
                return res;
            } else if (curSum < sum){
                a++;
            } else {
                b--;
            }
        }
        return res;
    }
};

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1056615746@qq.com

💰

Title:和为S的两个数字

Count:256

Author:攀登

Created At:2019-12-26, 23:12:31

Updated At:2024-06-15, 15:53:35

Url:http://jiafeimao-gjf.github.io/2019/12/26/sword-%E5%92%8C%E4%B8%BAS%E7%9A%84%E4%B8%A4%E4%B8%AA%E6%95%B0%E5%AD%97/

Copyright: 'Attribution-non-commercial-shared in the same way 4.0' Reprint please keep the original link and author.

×

Help us with donation