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

    和为S的两个数字

    题目描述

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

    输出描述:

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

    使用两个游标head和tail分别指向数组头部和尾部, 两个游标向彼此方向移动. 当两个游标和为sum时, 判断大小并插入ret中; 当两个游标和小于sum时, head向后移动; 当两个游标和大于sum时, tail向前移动

    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            vector<int> ret;
            if (array.empty())
                return ret;
            
            int head = 0;
            int tail = array.size() - 1;
            while(head < tail) {
                // 相等时
                if (sum == (array[head] + array[tail])) {
                    if (ret.empty()) {    // 判断ret是否空
                        ret.push_back(array[head]);
                        ret.push_back(array[tail]);
                    }
                    else { 
                        if ((ret[0] * ret[1]) > (array[head] * array[tail])) {
                            ret[0] = array[head];
                            ret[1] = array[tail];
                        }
                    }
                    head++;
                    tail--;
                    continue;
                }
                if (sum > (array[head] + array[tail])) {
                    head++;
                    continue;
                }
                if (sum < (array[head] + array[tail])) {
                    tail--;
                    continue;
                }
            }
            return ret;
        }
    };
    

    暴力法, 牛客没通过, 应该超时了

    class Solution {
    public:
        vector<int> FindNumbersWithSum(vector<int> array,int sum) {
            vector<int> ret;
            for (int i = 0; i < array.size() - 1; i++) {
                for (int j = i + 1; j < array.size(); j++) {
                    if (sum == (array[i]+array[j])) {
                        ret.push_back(array[i]);
                        ret.push_back(array[j]);
                        return ret;
                    }
                }
            }
            return ret;
        }
    };
    
  • 相关阅读:
    补码原理
    清风徐来,水波不兴
    月尾和周尾
    又一春又一季
    9.11
    晨光无限
    9.18
    心悠
    小事一桩
    一周岁啦
  • 原文地址:https://www.cnblogs.com/hesper/p/10529701.html
Copyright © 2011-2022 走看看