【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

57 有序数组中和为s的两个数

题目描述

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

输出描述:

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

#include <climits>
class Solution
{
public:
    vector<int> FindNumbersWithSum(vector<int> a,int sum)
    {
        if(a.size()<2) return vector<int>();
       
        int min_product = INT_MAX;
        int left = 0, right = a.size()-1;
        int a1,a2;
        bool find_flag = false;
        while(left < right) //从两边开始往中间扫描
        {
            int cursum = a[left] + a[right];
            if(cursum > sum) right--;
            else if(cursum < sum) left++;
            else
            {
                //因为对于递增序列,一定有x*y < (x+a)*(y-a),故这里其实可以不用判断
                //从两边开始往中间扫描时,找到的第一个即为乘机最小的一对数
                if(a[left]*a[right] < min_product)
                {
                    find_flag = true;
                    min_product = a[left]*a[right];
                    a1 = a[left];
                    a2 = a[right];
                }
                left++; //继续扫描
            }
        }
        if(find_flag) return vector<int>{a1,a2};
        else return vector<int>();
       
    }
};

拓展:和为S的连续正数序列

题目描述

小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!

输出描述:

输出所有和为S的连续正数序列(指1、2、3、4等)。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

class Solution
{
public:
    vector<vector<int> > FindContinuousSequence(int sum)
    {
        vector<vector<int>> result;
        if(sum < 3) return result; //至少需包含两个数 
       
        int left = 1, right = 2; //序列从1开始
        while(left < right//注意从开头开始扫描,直到left与right相遇
        {
            int cursum = (left+right)*(right - left + 1)/2; //用等差数列的求和公式
            if(cursum < sum) right++;
            else if(cursum > sum) left++;
            else
            {
                vector<int> temp;
                for(int i = left; i <= right; i++)
                    temp.push_back(i);
                result.push_back(temp); //push符合要求的连续正数序列
                left++; //继续下个序列的寻找
            }
        }//最后退出循环时,left = right = sum/2+1的位置,比如找10,最后指向 5、6,再均指向6,退出循环
        return result;
    }
};

转载于:https://www.cnblogs.com/wikiwen/p/10224221.html

【LeetCode 剑指offer刷题】数组题2:57 有序数组中和为s的两个数(167 Two Sum II - Input array is sorted)...相关推荐

  1. leetcode python3 简单题167. Two Sum II - Input array is sorted

    1.编辑器 我使用的是win10+vscode+leetcode+python3 环境配置参见我的博客: 链接 2.第一百六十七题 (1)题目 英文: Given an array of intege ...

  2. 167. Two Sum II - Input array is sorted 两数之和 II - 输入有序数组

    Title 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: ...

  3. leetcode 167 Two Sum II - Input array is sorted

    给定一个有序的数组,和一个整数目标,求两个数的和等于目标的索引,索引从1开始.假设必定存在解. 有两种思路: 直接找: vector<int> twoSum(vector<int&g ...

  4. [LeetCode By Python]167. Two Sum II - Input array is sorted

    题目: Given an array of integers that is already sorted in ascending order, find two numbers such that ...

  5. LeetCode 167. Two Sum II - Input array is sorted

    题目 : Given an array of integers that is already sorted in ascending order, find two numbers such tha ...

  6. 【LeetCode 剑指offer 刷题笔记】汇总(已完成)

    前言   不知不觉就结束了自己的秋招之路,虽感觉有些艰辛但是收获很多.找工作那段时间做了很多学习笔记,这是数据结构与算法相关的一部分笔记,这一块除了复习相关教科书,还有就是刷LeetCode和< ...

  7. 【LeetCode 剑指offer刷题】回溯法与暴力枚举法题6:Number of Islands

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Number of Islands Given a 2d grid map of '1's (land) and ' ...

  8. 【LeetCode 剑指offer刷题】查找与排序题14:Wiggle Sort(系列)

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Wiggle Sort II Given an unsorted array nums, reorder it su ...

  9. 【LeetCode 剑指offer刷题】查找与排序题12:Top K Frequent Elements

    [LeetCode & 剑指offer 刷题笔记]目录(持续更新中...) Top K Frequent Elements Given a non-empty array of integer ...

最新文章

  1. Libevent调用
  2. 【Spark亚太研究院系列丛书】Spark实战高手之路-第3章Spark架构设计与编程模型第1节 ①...
  3. Exchange日常管理之二十一:管理邮件归档
  4. golang常见内存泄漏
  5. Android中的约束布局
  6. java.lang.IllegalStateException: Failed to read Class-Path attribute from manifest of jar file:/XXX
  7. 设置ubuntu下使用ls命令显示文件颜色显示
  8. C++学习(二)之Visual Studio写system语句 生成可执行文件
  9. filebeat配置参数_filebeat配置详解
  10. EMUI10 亮相开发者大会:分布式设计打造全场景体验
  11. log4j的日志级别
  12. c语言 输入一个字符串 把其中的字符按逆序输出,输入一个字符串,把其中的字符按逆序输出。 C++...
  13. 2020-10-04
  14. 加密邮箱的数字签名和加密原理
  15. 更换python的pip下载国内源
  16. Image2Lcd图片取模软件
  17. Beta测试与Alpha测试的区别?
  18. Python2中文乱码处理
  19. 众人给诺基亚支招 Android提议何时了?
  20. 痛苦的时候,不妨默读“有容乃大”

热门文章

  1. docker笔记-docker-container
  2. arcgis server for flex中文乱码问题(转)
  3. 无法使用index seek的写法
  4. linux上安装pycharm
  5. exportfs命令和FTP服务
  6. 人工智能:决胜未来之道培训课程大纲
  7. Codeforces Gym101246C:Explode 'Em All(DP + bitset)
  8. final 140字评论II
  9. Centos7源码安装mysql及读写分离,互为主从
  10. Xamarin.Android开发实践(十七)