41. 和为s的两个数字VS和为s的连续正数序列(C++版本)
题目一:
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。
实现代码:
bool GetTwoNumWithDestSum(int* pData, int size, int destData, int& num1, int& num2)
{if (nullptr == pData || size < 2) return false;int back = 0; // back数据指向第一个int front = size - 1; // front指向最后一个while (back < front){if (pData[back] + pData[front] == destData){num1 = pData[back];num2 = pData[front];return true;}else if (pData[back] + pData[front] > destData) --front; // front前移else ++back; // back后移}return false;
}
题目二:
输入一个正数s,打印出所有和为s的连续正整数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所有结果打印出3个连续序列1-5、4-6、7-8。
实现代码:
void PrintContinousSequence(int beginData, int endData)
{for (int curData = beginData; curData <= endData; ++curData) std::cout << curData << " ";std::cout << std::endl;
}bool GetContinousSequence(int destData)
{bool hasFound = false;if (destData < 3) hasFound;int beginData = 1;int endData = 2;int middleData = (destData + 1) / 2;int curSum = beginData + endData;while (beginData < middleData) // 注意这里的判断条件{if (curSum == destData){PrintContinousSequence(beginData, endData);curSum -= beginData;++beginData;hasFound = true;}else if (curSum > destData){curSum -= beginData; // 当前和扣除尾部++beginData; // 尾部向前移动}else {++endData; // 首部向前移动curSum += endData; // 当前和加上新首部}}return hasFound;
}
41. 和为s的两个数字VS和为s的连续正数序列(C++版本)相关推荐
- 【剑指offer-Java版】41和为s的两个数字VS和为s的连续正数序列
和为S的两个数字以及和为S的连续正数序列:输入是一个递增排序的数组,查找其中一对满足和为S的数,输出.如果有多对,输出其中一对 public void FindNumbersWithSum(int n ...
- 41.和为s的两个数字 VS 和为s的连续正数序列
为什么80%的码农都做不了架构师?>>> 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. ...
- [剑指offer]面试题41:和为s的两个数字VS和为s的连续正数序列
面试题41:和为s的两个数字VS和为s的连续正数序列 题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,输出任意一对即可. 代码如下: b ...
- 和为s的两个数字与和为s的连续正数序列
题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s.如果有多对数字的和等于s,则输出任意一对即可. 分析:选择数组的两端,将其相加,然后与s比较,如果比s大,则将指向 ...
- 剑指offer面试题[41]-和为s的两个数VS和为s的连续正数序列
题目描述 题目1: 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的. 输出描述: 对应每个测试案例,输出两个数,小的先输 ...
- 【剑指offer{40-44}】和为S的连续正数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列、扑克牌顺子
文章目录 和为S的连续正数序列 题目描述 C++代码 和为S的两个数字 题目描述 C++代码 左旋转字符串 题目描述 C++代码 翻转单词顺序列 题目描述 C++代码 扑克牌顺子 题目描述 C++代码 ...
- python怎样连续输入两个数字_在python中生成连续的数字,同时输入不变
显而易见的是将give变成一个对象而不是一个函数.*任何对象都可以通过定义^{}方法来调用.在 当我们在做的时候,你的代码可以简化很多,所以让我们这样做吧.在class Giver(object): ...
- 【面试题41】和为s的两个数字VS和为s的连续整数序列
[题目描述] 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s.如果有多对数字的和等于s,输出任意一队即可. [解决方案] 设置前后指针,根据所指数字的和来移动前后指针,直 ...
- 《剑指offer》-- 和为S的连续整数序列、和为S的两个数字、左旋转字符串、翻转单词顺序列
一.和为S的连续整数序列: 1.题目: 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100 ...
- 数据结构与算法--有序数组中找出和为s的两个数字
有序数组中找和为s的两个数字 题目:输入一个递增排序的数组array, 和一个数字s, 在数组中找出两个数,使得这两个数的和是s,如果有多对,输出一对即可. 最简单方案 双循环,每次获取一个数据,和数 ...
最新文章
- 160630、五句话搞定JavaScript作用域
- 做项目需要使用的工具类
- tomact如何处理一个http请求?
- Spring-级联赋值
- Linux中高斯分布的参数设置,华为openGauss 配置操作系统参数
- Unity 2017 Game Optimization 读书笔记 Dynamic Graphics(1)
- 剑指offer之 旋转数组的最小数字
- 阿基米德椭圆规原理,你看懂了吗?
- MyBatis generator 使用方式 小结
- python抽取指定url页面的title_Python使用scrapy爬虫,爬取今日头条首页推荐新闻
- python标准库的图像处理模块_PIL:Python Imaging Library(图像处理标准库)
- 最常见到的runtime exception 异常
- android自定义趋势图
- cmd copy命令 文件复制
- golang json 格式化输出对象
- 毕业相关-自动问答综述
- 这种股权结构一定要远离!
- Systemverilog中时间单位以及相关系统函数
- 宝塔面板重启mysql命令_宝塔linux面板命令大全
- 蓝牙nrf52832的架构和开发