zoukankan      html  css  js  c++  java
  • 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的

    剑指Offer两数之和为S题解

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

    思路:

    //思路:用两个指针,头尾指针向中间靠拢,
    //当两数之和大于S时,说明最大值太大了(数组是递增的),所以右指针向左移动
    //两数之和小于S时,说明太小了,左指针向右移动
    //两数之和等于S就是所要求的
    //乘积最小使迷惑的,当第一个符合条件就是最小的
    #include <iostream>
    #include <vector>
    using namespace std;
    
    //输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,
    //如果有多对数字的和等于S,输出两个数的乘积最小的
    
    //思路:用两个指针,头尾指针向中间靠拢,
    //当两数之和大于S时,说明最大值太大了(数组是递增的),所以右指针向左移动
    //两数之和小于S时,说明太小了,左指针向右移动
    //两数之和等于S就是所要求的
    //乘积最小使迷惑的,当第一个符合条件就是最小的
    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            vector<int> result;
    
            int left = 0, right = array.size()-1;  // 双指针
            while(left < right)
            {
                if (array[left]+array[right] == sum)
                {
                    result.push_back(array[left]);
                    result.push_back(array[right]);
                    break;
                }
                else if(array[left]+array[right] > sum) // 说明右边的太大,
                    right--;
                else
                    left++;
            }
            return result;
        }
    };
    
    int main()
    {
        vector<int> nums={1,2,3,4,5,6,7,8};
        Solution s;
        vector<int> vec = s.FindNumbersWithSum(nums,9);
        cout << vec[0] << " " << vec[1];
    
        return 0;
    }
  • 相关阅读:
    使用git管理github项目
    router 跳转页面
    JS中[object object]怎么取值
    微信授权获取code
    闭包
    css属性clear
    javaScript循环
    css属性position
    跨域
    浅析JS内存 一
  • 原文地址:https://www.cnblogs.com/xiaokang01/p/12365704.html
Copyright © 2011-2022 走看看