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

    思路

    假设:若b>a,且存在,
    a + b = s;
    (a - m ) + (b + m) = s
    则:(a - m )(b + m)=ab - (b-a)m - m*m < ab;说明外层的乘积更小
    也就是说依然是左右夹逼法!!!只需要2个指针
    1.left开头,right指向结尾
    2.如果和小于sum,说明太小了,left右移寻找更大的数
    3.如果和大于sum,说明太大了,right左移寻找更小的数
    4.和相等,把left和right的数返回

    代码:

    class Solution {
    public:
        # define NULL __null
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            int low = 0,high = array.size()-1;
            vector<int>result;
            while(low<high)
            {
                while(array[low]+array[high]>sum)
                {
                    high = high-1;
                }
                while(array[low]+array[high]<sum)
                {
                    low = low + 1;
                }
                if(array[low]+array[high]==sum)
                {
                    result.push_back(array[low]);
                    result.push_back(array[high]);
                    break;
                }
            }
            return result;
        }
    };
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    BZOJ4569: [Scoi2016]萌萌哒
    BZOJ4566: [Haoi2016]找相同字符
    BZOJ4556: [Tjoi2016&Heoi2016]字符串
    BZOJ4545: DQS的trie
    BZOJ4458: GTY的OJ
    Codeforces Beta Round #19E. Fairy
    不确定性推理
    朴素贝叶斯
    对抗搜索
    struct
  • 原文地址:https://www.cnblogs.com/gcter/p/15338730.html
Copyright © 2011-2022 走看看