57 和为S的数字
题目一:和为S的两个数字
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
测试序列
1)功能测试(数组中存在和为s的两个数;数组中不存在和为s的两个数)
2)特殊输入测试(数组指针为空指针)
解题思路:
使用两个指针分别指向首尾,然后根据和不断向中间逼近,遇到的第一个满足条件的两个数,就是乘积最小的(原理同 正方形、矩阵周长相同,正方向面积大 可知,4*4>2*6)。
class Solution {
public:
vector<int> FindNumbersWithSum(vector<int> array,int sum) {
int size = array.size();
vector<int> res;
if(size<2)
return res;
int front = 0, back = size-1;
while(back>front){
int s = array[back]+array[front];
if(s==sum){
res.push_back(array[front]);
res.push_back(array[back]);
break;
}else if(s<sum){
front++;
}else{
back--;
}
}
return res; //没有找到,直接返回空的res
}
};
题目二:和为S的连续正数序列
小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!
输出描述:
输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序
测试序列
1)功能测试(存在和为s的连续序列;不存在和为s的连续序列)
2)边界值测试(连续序列的最小和3)
解题思路:
仍然使用双指针,记录序列的首尾(最大值与最小值)
如果从front到back序列和大于sum,则可以从序列中去掉较小的值,即增大front的值
如果从front到back序列和小于sum,则可以增大back的值,让序列包含更多的数
因为序列中至少有两个数字,因此一直增加front到(1+sum)/2为止
class Solution {
public:
vector<vector<int> > FindContinuousSequence(int sum) {
vector<vector<int> > res;
if(sum<3) //两个正数的和至少是3
return res;
int front = 1, back=2; //不能初始化为 0/1
int mid = (1+sum)/2;
//while(front<back && back<sum){
while(front<mid){
int s = getSeqSum(front, back);
if(s==sum){
vector<int> line;
for(int i=front;i<=back;i++){
line.push_back(i);
}
res.push_back(line);
front++; //重新找
}else if(s<sum){
back++;
}else{
front++; //并更新back
//不用更新back!!
//back--; //会造成front==back的情况,然后不满足while循环
//back=front+1; //有比较好的更新么
}
}
return res;
}
int getSeqSum (int front, int back){
int ssum = (front+back)*(back-front+1)/2;
return ssum;
}
};
57 和为S的数字的更多相关文章
- 【剑指offer】面试题 57. 和为 S 的数字
面试题 57. 和为 S 的两个数字 题目一:和为 S 的两个数字 题目 输入一个递增排序的数组和一个数字 S,在数组中查找两个数,是的他们的和正好是 S,如果有多对数字的和等于 S, 输出两个数的乘 ...
- JS实现input中输入数字,控制每四位加一个空格(银行卡号格式)
前言 今天来讲讲js中实现input中输入数字,控制每四位加一个空格的方法!这个主要是应用于我们在填写表单的时候,填写银行卡信息,要求我们输入的数字是四位一个空格!今天主要介绍两种方式来实现这个方法! ...
- javascript学习笔记10----字符串的基本操作
1.字符串的基本操作如下: 定义字符串: var str = "Hello World!" 字符串的基本操作如下: str.length-----返回字符串长度,这里返回12 st ...
- angularjs 时间格式化
本地化日期格式化: ({{ today | date:'medium' }})Nov 19, 2015 3:57:48 PM ({{ today | date:'short' }})11/19/15 ...
- 268条PCB Layout设计规范
1 PCB布线与布局 PCB布线与布局隔离准则:强弱电流隔离.大小电压隔离,高低频率隔离.输入输出隔离.数字模拟隔离.输en入输出隔离,分界标准为相差一个数量级.隔离方法包括:空间远离.地线隔开. 2 ...
- HTML及CSS学习笔记
推荐博客:付铭 day-01 HTML 1.HTML 基本语法 html标签 单标签 <img /> .<img> 双标签 <html> </html> ...
- [C#.Net]KeyDown(KeyUp)和KeyPress的区别
在keyDown事件里使用keyValue:在keyPress事件里使用keyChar. keyValue转换keyChar:(char)keyValue 验证只有数字和backSpace e.han ...
- js学习笔记10----字符串的基本操作
1.字符串的基本操作如下: 定义字符串: var str = "Hello World!" 字符串的基本操作如下: str.length-----返回字符串长度,这里返回12 st ...
- 201621123010 《Java程序设计》第1周学习总结
1. 本周学习总结 本周主要学习了五个知识点 Java是面向对象的语言 JDK,JRE,JVM的联系 javac及java指令 Java跨平台运行的原理 新概念:类,类是面向对象中的概念 2. 书面作 ...
随机推荐
- Js跨一级域名同步cookie
1. 纯Js同步两个域名下的cookie document.cookie = "name=" + "value;" + "expires=" ...
- nodejs初步
nodejs是啥? 看名字,很容易认为它是一种开发语言,实质上,它更像是一种WEB服务器,一种工具.因为nodejs的作用,在于在服务器端解释.运行javascript.node.js本身不是开发语言 ...
- maven使用(转载)
一.安装配置: 1.安装配置JDK java/javac -version 2.安装配置maven mvn -v 3.下载项目模板 mvn archetype:generate 二.详 ...
- vim g 和 % 区别
vim中的g(global)和%的区别: g:全局的 s/pattern/replacement/ : 替换行中出现的每一个pattern g/pattern/s/pattern/replaceme ...
- tiny4412 裸机程序 一、说明【转】
本文转载自:http://blog.csdn.net/eshing/article/details/37109115 首先.我想说明为什么我写这个文档?我自己想学点东西,过于求成,又过于自信,直接买了 ...
- 0619-dedeCMS的安装、重装、目录说明、基本操作及注意事项
一.安装步骤: 1.解压文件,将我们需要的uploads文件夹更名为dedeCMS 2.从站点下打开dedeCMS-install-index.php开始安装 3.安装完成后到php.ini中设置re ...
- sql case when 用法
sql语言中有没有类似C语言中的switch case的语句?? 没有,用case when 来代替就行了. 例如,下面的语句显示中文年月 select ...
- 点开瞅瞅,再来几道Python面试题吧,Python面试题No20
本面试题题库,由公号:非本科程序员 整理发布 第1题:如何理解 Django 被称为 MTV 模式? 这个题就是面向对象设计和设计模式的开始. 你可能比较熟悉的模式叫做: MVC.说是 Model V ...
- BZOJ 4310 二分+SA+RMQ
思路: 首先求出后缀数组和height数组,这样能得到本质不同的子串数目 这里利用:本质不同的子串=∑(Len−SA[i]−height[i])=∑(Len−SA[i]−height[i])利用SA[ ...
- NOIP真题汇总
想想在NOIP前总得做做真题吧,于是长达一个月的刷题开始了 涉及2008-2016年大部分题目 NOIP [2008] 4/4 1.传纸条:清真的三维DP 2.笨小猴:字符串模拟 3.火柴棒等式:打表 ...