题目:

输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序

思路:

small代表序列最小数字,large代表序列最大数字。初始化small为1,large为2.

如果序列当前和curSum大于要找的数s,则small往前移;如果序列当前和小于s,则large往前移。当然每次要更新curSum。

注意的是当curSum等于s时,要更新large

注意:有循环的,要注意循环内的各个分支,不要出现死循环。(连续两题了)

代码:

class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int> > res; int small=,large=;
int curSum=small+large;
while(small<sum/+)
{
if(curSum>sum)
{
curSum-=small;
small++;
}
else if(curSum<sum)
{
large++;
curSum+=large;
}
else
{
vector<int> seq;
for(int i=small;i<=large;++i)
seq.push_back(i); res.push_back(seq); ++large;//不要忘了这两句噢!!!
curSum+=large;
}
} return res;
}
};

题目:

题目描述

输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。

思路:

small和big分别指向序列的首尾,当和大于S时,big往回走;当和小于S时,small往前走。

注意:small和big都是下标,计算和以及返回的时候,都要用array,不要直接用下标了。

代码:

class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
vector<int> res;
if(array.size()<) return res;
int small=,big=array.size()-;
while(small<big)
{
int curSum=array[small]+array[big];//注意这里small和big都是下标,不要直接相加噢
if(curSum==sum)
{
res.push_back(array[small]);//输出也是,array[small],small仅仅是下标
res.push_back(array[big]);
return res;
}
else if(curSum>sum)
{
big--;
}
else
{
small++;
}
}
return res;
}
};

【剑指offer】面试题41:和为 s 的两个数字 VS 和为 s 的连续正数序列的更多相关文章

  1. [剑指Offer]41.和为S的两个数字 VS 和为S的连续正数序列

    [剑指Offer]41 和为S的两个数字 VS 和为S的连续正数序列 Leetcode T1 Two Sum Given an array of integers, return indices of ...

  2. C++版 - 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解

    剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题) 原书题目:0, 1, - , n-1 这n个数字排成一个圈圈,从数字0开始每次从圆圏里删除第m个数字.求出这个圈圈里剩下的最后一个数字 ...

  3. 剑指Offer - 九度1352 - 和为S的两个数字

    剑指Offer - 九度1352 - 和为S的两个数字2014-02-05 18:15 题目描述: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于 ...

  4. 【面试题041】和为s的两个数字VS和为s的连续正数序列

    [面试题041]和为s的两个数字VS和为s的连续正数序列 题目一:     输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...

  5. 剑指Offer:面试题29——数组中出现次数超过一半的数字(java实现)

    PS:在前几天的面试中,被问到了这个题.然而当时只能用最低效的方法来解. 问题描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2, ...

  6. 剑指Offer面试题:6.旋转数组中的最小数字

    一 题目:旋转数组中的最小数字 题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转.输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素.例如数组{3,4,5,1,2}为{1, ...

  7. 剑指offer四十二之和为S的两个数字

    一.题目 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 二.思路 数列满足递增,设两个头尾两个指针i和j,若ai + ...

  8. 剑指offer——和为s的两个数字VS和为s的连续正数序列

    两种方法都类似于快排的变形. #include <iostream> #include <string> using namespace std; bool FindNumbe ...

  9. 【剑指Offer】42、和为S的两个数字

      题目描述:   输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的.   输出描述:   对应每个测试案例,输出两个数, ...

随机推荐

  1. [深入React] 6.组件

    组件是react的大杀器,超出其他框架几百里 react 组件和dom一样也是树状结构,只能由上而下传递变量(或者调用),不可以兄弟间或者更远的发生关系,为的就是简单,而且工作的很好. 每个组件有自己 ...

  2. Hadoop基本概念

    一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储.Hadoop实现了一个分布式文件系统(Hadoop Dist ...

  3. ADT下载地址整理

    參考以下文章 http://developer.android.com/tools/sdk/eclipse-adt.html 整理了官网的下载地址 http://dl.google.com/andro ...

  4. C# winform xml的增删改查

    代码如下: using System; using System.Collections.Generic; using System.IO; using System.Linq; using Syst ...

  5. BitmapFactory 加载图片到内存

    Bitmap占用内存分析 Android的虚拟机是基于寄存器的Dalvik,它的最大堆(单个进程可用内存)大小一般是16M,当然不同设备是不一样的,可以查看/system/build.prop文件,[ ...

  6. css圆角

    在CSS3中圆角属性,有四个.三个.两个和一个值. 四个值: 第一个值为左上角,第二个值为右上角,第三个值为右下角,第四个值为左下角.

  7. javascript 实现jsonp

    jsonp原理其实也简单,虽然ajax不能跨域,但是通过src这个属性我们可以实现跨域,其实和我们引入第三方jquery调用它的方法一样的. html: <!DOCTYPE html> & ...

  8. overcast

    关于一个利用relative的简单布局,firefox上出现一点问题,暂且不明原因 firefox的 chrome的 代码记录 <!DOCTYPE html> <html lang= ...

  9. SQL2008转SQL2005数据库经验

    1.用SQL2008创建兼容2005的结构脚本. 2.在2005中生成数据库结构. 3.利用2005中的数据导入直接从源数据库中导入数据,此处注意自增长标识的选项需要添加,多表优化选项可以去掉,这里不 ...

  10. [c#]asp.net开发微信公众平台(4)关注事件、用户记录、回复文本消息

    上一篇已经把所有消息封装且都各自有方法处理了,这篇从使用第一步——关注开始,  关注之后进行消息记录,同时回复文本消息给用户,关注方法:DoSub,另外新用户扫描带参数的二维码关注方法:DoCodeN ...