zoukankan      html  css  js  c++  java
  • 和为S的两个数字

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

    输出描述:
    对应每个测试案例,输出两个数,小的先输出。
    思路:左右两个指针,和大于sum的话right--,小于left++;加两个变量存储积最小的结果。
     1 class Solution {
     2 public:
     3     vector<int> FindNumbersWithSum(vector<int> array,int sum) {
     4         int n=array.size();
     5         vector<int> res;
     6         if(n<2) return res;
     7         int left=0,right=n-1;
     8         int add1=array[n-1],add2=array[n-1];
     9         while(left<right){
    10             int tmp=array[left]+array[right];
    11             if(tmp==sum){
    12                 if((array[left]*array[right])<(add1*add2)){
    13                     add1=array[left];
    14                     add2=array[right];
    15                 }
    16                 left++;
    17                 continue;
    18             }
    19             if(tmp>sum){
    20                 right--;
    21                 continue;
    22             }
    23             if(tmp<sum){
    24                 left++;
    25                 continue;
    26             }
    27         }
    28         if(add1!=add2){
    29             res.push_back(add1);
    30             res.push_back(add2);
    31         }
    32         return res;
    33     }
    34 };
  • 相关阅读:
    socket错误码获取
    代码整洁之道读书笔记函数
    算法学习之堆排序
    包含与继承区别
    提高 LayerBacked Memory Use
    RenderBuffer
    算法学习之快速排序
    NSTimer
    DNS and BIND ... (转载) zhumao
    Samba学习笔记(转载) zhumao
  • 原文地址:https://www.cnblogs.com/zl1991/p/4777426.html
Copyright © 2011-2022 走看看