【LeetCode】面试题57 - II. 和为s的连续正数序列
时间:2020-03-06
本文章向大家介绍【LeetCode】面试题57 - II. 和为s的连续正数序列,主要包括【LeetCode】面试题57 - II. 和为s的连续正数序列使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目链接:
题目描述:
输入一个正整数 target
,输出所有和为 target
的连续正整数序列(至少含有两个数)。序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。(1 <= target <= 10^5
)
示例:
示例 1:
输入:target = 9 输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]]
思路:
此题可考虑用滑动窗口解决。
left
和 right
分别表示窗口的左右边界,从 left
到 right
的序列和记为 sum
。
- 如果
sum < target
,则将右边界right
右移,增大窗口囊括更多的元素以增大sum
; - 如果
sum > target
,则将左边界left
右移,缩小窗口减少序列中的元素以减小sum
; - 如果
sum == target
,则此时的序列就是所求。
注意:窗口的左边界和右边界永远只能向右移动。
另外,左边界 left
移动到目标值 target
的一半处即可停止,因为当 left
移动到 target / 2
时,最小的序列和也大于 target
了,之后不会再有满足条件的。
代码实现:
class Solution {
public int[][] findContinuousSequence(int target) {
// 左边界,右边界
int left = 1, right = 2;
// 序列和
int sum = left + right;
// 存放结果
List<int[]> result = new ArrayList<>();
while (left <= target / 2 && left < right) {
if (sum < target) {
// 序列和小于目标值
right ++;
sum += right;
} else if (sum > target) {
// 序列和大于目标值
sum -= left;
left ++;
} else {
// 序列和等于目标值
int[] arr = new int[right - left + 1];
for (int i = left; i <= right; i++) {
arr[i - left] = i;
}
result.add(arr);
sum -= left;
left ++;
}
}
return result.toArray(new int[result.size()][]);
}
}
因为题目中已说明 target
是正整数序列和,且至少包含两个数,所以 target
至少是 3。
原文地址:https://www.cnblogs.com/ME-WE/p/12427605.html
- 八大基础排序总结
- LLDP在ODL中的实现及源码分析(一)
- 在虚拟机间NFV应用上使用采用DPDK的Open vSwitch
- ONOS集群选举分析
- OpenStack Spice协议配置
- 源码解读ODL的MAC地址学习(二)
- SpringBoot开发案例之整合Spring-data-jpa进阶篇
- SpringBoot开发案例之微信小程序录音上传
- SpringBoot开发案例之微信小程序文件上传
- SpringBoot开发案例之配置静态资源文件路径
- 源码解读ODL的MAC地址学习(一)
- SpringBoot开发案例之配置Druid数据库连接池
- SpringBoot开发案例之mail中文附件乱码
- SpringBoot开发案例之整合Swagger篇
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 如何基于Python代码实现高精度免费OCR工具
- python怎么调用自己的函数
- Python datetime模块使用方法小结
- PHP hebrev()函数用法讲解
- PHP hex2bin()函数用法讲解
- PHP+jQuery实现即点即改功能示例
- PHP html_entity_decode()函数讲解
- PHP下载大文件失败并限制下载速度的实例代码
- thinkphp5框架实现的自定义扩展类操作示例
- python导入库的具体方法
- PHP+jQuery实现双击修改table表格功能示例
- 基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
- Laravel推荐使用的十个辅助函数
- PHP htmlentities()函数用法讲解
- thinkphp5框架API token身份验证功能示例