• 和为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;
        }
    };
    
  • 相关阅读:
    itextpd f生成 pdf 文件
    java word文档 转 html文件
    Activiti之 Exclusive Gateway
    activiti入门
    lucene分词器与搜索
    这款小程序 能让你和孙悟空一样 可以七十二变
    西游记中神兽谛听的能力 这款小程序也有
    想拥有一款钢铁侠Jarvis管家的软件吗?
    微信小程序开发填坑指南V1
    NaviSoft31.源码开发完成
  • 原文地址:https://www.cnblogs.com/hesper/p/10529701.html
Copyright © 2020-2023  润新知