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

    题目:

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

    输出描述:

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

    代码:

     1 class Solution {
     2 public:
     3     vector<int> FindNumbersWithSum(vector<int> array,int sum) {
     4         vector<int> p;
     5         int length = array.size();
     6         int low = 0, high = length -1;
     7         while(low < high){
     8             int Sum = array[low] + array[high];
     9             if( Sum < sum) low ++;
    10             else if( Sum > sum) high --;
    11             else{
    12                 p.push_back(array[low]);
    13                 p.push_back(array[high]);
    14                 break;
    15             }
    16         }
    17         return p;
    18     }
    19 };

    我的笔记:

      利用滑动窗口的原理,设置上限指针和下限指针,并根据Sum和的情况来移动指针,题目要求乘积最小,通过这样计算可以发现,两数距离越大。

  • 相关阅读:
    28完全背包+扩展欧几里得(包子凑数)
    HDU 3527 SPY
    POJ 3615 Cow Hurdles
    POJ 3620 Avoid The Lakes
    POJ 3036 Honeycomb Walk
    HDU 2352 Verdis Quo
    HDU 2368 Alfredo's Pizza Restaurant
    HDU 2700 Parity
    HDU 3763 CDs
    POJ 3279 Fliptile
  • 原文地址:https://www.cnblogs.com/john1015/p/13087884.html
Copyright © 2011-2022 走看看