leetcode - 面试题57 - II. 和为s的连续正数序列
2020-03-15 18:23
1436 查看
输入一个正整数
target,输出所有和为
target的连续正整数序列(至少含有两个数)。
序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
示例 1:
输入:target = 9 输出:[[2,3,4],[4,5]]
示例 2:
输入:target = 15 输出:[[1,2,3,4,5],[4,5,6],[7,8]]
限制:
1 <= target <= 10^5
题解思路
可以采用枚举+暴力的方式来得到所有满足条件的数组,枚举变量值的上限为target/2取整;在这个枚举的基础上,去比遍历这个值大的所有值,累加起来看是否满足条件。 看到题解中有使用滑动窗口的方法来做,发现非常的简洁。即参考的题解做法:
作者:nettee
链接:https://leetcode-cn.com/problems/he-wei-sde-lian-xu-zheng-shu-xu-lie-lcof/solution/shi-yao-shi-hua-dong-chuang-kou-yi-ji-ru-he-yong-h/
来源:力扣(LeetCode)
//数组首字母下标的上限是(target-1)/2
//可以看成是滑动窗口 //当窗口的和小于target时候,窗口应该扩大,所以窗口右边界要向右边移动 //当窗口的和大于target时候,窗口应该缩小,所以窗口的左边界要向右边移动 //当窗口的和恰好等于 target 的时候,我们需要记录此时的结果。设此时的窗口为 [i, j)[i,j),那么我们已经找到了一个 ii 开头的序列,也是唯一一个 ii 开头的序列,接下来需要找 i+1i+1 开头的序列,所以窗口的左边界要向右移动 //窗口是左闭右开
import java.util.ArrayList; import java.util.List; import java.util.Vector; /** * @Author liuhaoqi * @Date 2020/3/6 11:30 * @Version 1.0 */ public class leetcode_57 { public int[][] findContinuousSequence(int target) { //用枚举+暴力方法做一遍 List<int[]> list = new ArrayList<>(); //数组首字母下标的上限是(target-1)/2 //可以看成是滑动窗口 //当窗口的和小于target时候,窗口应该扩大,所以窗口右边界要向右边移动 //当窗口的和大于target时候,窗口应该缩小,所以窗口的左边界要向右边移动 //当窗口的和恰好等于 target 的时候,我们需要记录此时的结果。设此时的窗口为 [i, j)[i,j),那么我们已经找到了一个 ii 开头的序列,也是唯一一个 ii 开头的序列,接下来需要找 i+1i+1 开头的序列,所以窗口的左边界要向右移动 //窗口是左闭右开 int i=1; int j=1; int sum=0; while (i<=target/2) { if (sum < target) { //窗口要扩大 sum+=j; j++; } else if (sum > target) { //窗口要缩小 sum -= i; i++; } else { //找到了这组数 int[] arr=new int[j-i]; for (int k = i; k <j ; k++) { arr[k - i] = k; } list.add(arr); //左边界向右移动,找下一组数 sum-=i; sum=sum-i-1; i+=2; } } return list.toArray(new int[list.size()][]); } }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 力扣LeetCode【每日一题】—— 面试题解答57 - II. 和为s的连续正数序列(Python3)滑动窗口
- 【Golang】LeetCode-剑指Offer-面试题57 - II - 和为s的连续正数序列【两种解法】
- 面试题57 - II. 和为s的连续正数序列
- 面试题57. 和为s的两个数字 / 面试题57 - II. 和为s的连续正数序列
- 力扣面试题57 - II. 和为s的连续正数序列 详解滑动窗口法 python3实现
- 面试题57-题目二:和为S的连续正数序列
- 【剑指offer】面试题57(2):和为S的连续正数序列
- leetcode-面57 和为s的连续正数序列
- 网易面试题 输入一个正数n,输出所有和为n连续正数序列
- 《剑指Offer》学习笔记--面试题41:和为s的两个数字VS和为s的连续正数序列
- 【面试题041】和为s的两个数字VS和为s的连续正数序列
- 剑指offer面试题 和为s的两个数字 VS 和为s的连续正数序列
- [LeetCode] Binary Tree Longest Consecutive Sequence II 二叉树最长连续序列之二
- 面试题41:和为s的两个数字,和为s的连续正数序列
- 微软,Google面试题 (26) —— 和为n连续正数序列
- 【剑指Offer】面试题41:和为s的连续正数序列
- 面试题41(2). 和为S的连续正数序列
- 面试题:和为s的连续正数序列
- 剑指Offer-面试题41-和为s 的两个数字vs 和为s 的连续正数序列
- 面试题41 和为S的连续正数序列