剑指 Offer 57 - II. 和为s的连续正数序列

Offer_57_2

题目描述

方法一:暴力枚举

package com.walegarrett.offer;

/**
* @Author WaleGarrett
* @Date 2021/2/12 16:42
*/ /**
* 题目描述:输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。
* 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。
*/ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; /**
* 方法一:暴力枚举
*/
public class Offer_57_2 {
public int[][] findContinuousSequence(int target) {
List<int[]> list = new ArrayList<>();
int sum = 0, upp = (target - 1) / 2;
for(int i=1; i<= upp; i++){
for(int j=i;;j++){
sum+=j;
if(sum > target) {
sum = 0;
break;
}
else if(sum == target){
int[] ans = new int[j-i+1];
for(int k=i;k<=j;k++){
ans[k-i] = k;
}
list.add(ans);
sum = 0;
break;
}
}
}
return list.toArray(new int[list.size()][]);
}
}

方法二:枚举+数学优化

/**

 * 方法二:枚举+递增序列的求和公式
*/
class Offer_57_2_2 {
public int[][] findContinuousSequence(int target) {
List<int[]> list = new ArrayList<>();
int sum = 0, upp = (target - 1) / 2;
for(int x=1; x<= upp; x++){
long delta = 1 - 4 * (x - (long) x * x - 2 * target);
if(delta<0)//无解
continue;
int delta_sqrt = (int)Math.sqrt(delta + 0.5);
if((long)delta_sqrt * delta_sqrt == delta && (delta_sqrt-1)%2 == 0){
int y = (-1 + delta_sqrt) / 2;
if(x<y){
int[] ans = new int[y-x+1];
for(int k=x;k<=y;k++){
ans[k-x]=k;
}
list.add(ans);
}
}
}
return list.toArray(new int[list.size()][]);
}
}

方法三:双指针法

/**

 * 方法三:双指针法
*/
class Offer_57_2_3 {
public int[][] findContinuousSequence(int target) {
List<int[]> list = new ArrayList<>();
for(int l=1,r=2;l<r;){
int sum = (l+r) *(r-l+1) /2;
if(sum == target){
int[] ans = new int[r-l+1];
for(int k=l;k<=r;k++)
ans[k-l] = k;
list.add(ans);
l++;
}else if(sum<target)
r++;
else if(sum>target)
l++;
} return list.toArray(new int[list.size()][]);
}
}

参考题解:和为s的连续正数序列

剑指 Offer 57 - II. 和为s的连续正数序列 + 双指针 + 数论的更多相关文章

  1. 力扣 - 剑指 Offer 57 - II. 和为s的连续正数序列

    题目 剑指 Offer 57 - II. 和为s的连续正数序列 思路1(双指针/滑动窗口) 所谓滑动窗口,就是需要我们从一个序列中找到某些连续的子序列,我们可以使用两个for循环来遍历查找,但是未免效 ...

  2. 剑指 Offer 57 - II. 和为s的连续正数序列

    本题 题目链接 题目描述 我的题解 方法三双100%, 方法一 适合范围广 方法一:双指针(也叫 滑动窗口) 思路分析 用两个指针i和表示当前枚举到的以i为起点,j为终点的区间,sum表示[i,j]的 ...

  3. 剑指offer四十一之和为S的连续正数序列

    一.题目   题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数 ...

  4. LeetCode 题解 | 面试题57 - II. 和为s的连续正数序列

    题目描述 面试题57 - II. 和为s的连续正数序列 难度简单37收藏分享切换为英文关注反馈 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内 ...

  5. 剑指 Offer 57. 和为s的两个数字 + 二分法 + 双指针

    剑指 Offer 57. 和为s的两个数字 Offer_57 题目详情 使用二分法 package com.walegarrett.offer; /** * @Author WaleGarrett * ...

  6. 《剑指offer》面试题57 - II. 和为s的连续正数序列

    问题描述 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列. 示例 1: 输入:target ...

  7. 剑指offer41:所有和为S的连续正数序列,例如,有多少种连续的正数序列的和为100

    1 题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久 ...

  8. [简单-剑指 Offer 53 - II. 0~n-1中缺失的数字]

    [简单-剑指 Offer 53 - II. 0-n-1中缺失的数字] 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0-n-1之内.在范围0-n-1内的n个数字中有且只有一 ...

  9. 剑指 Offer 68 - II. 二叉树的最近公共祖先 + 最近公共祖先(LCA)

    剑指 Offer 68 - II. 二叉树的最近公共祖先 Offer_68_2 题目详情 题解分析 java代码 package com.walegarrett.offer; /** * @Autho ...

随机推荐

  1. LA3902 Network (树上dfs)

    题目链接:点击打开链接 题意:n台机器连成一个树状网络,其中叶节点是客户端,其他节点是服务器,目前有一台服务器s正在提供服务.让你在其他服务器上也安排同样的服务,使得每台客户端到最近服务器的距离不超过 ...

  2. Network UVA - 315 无向图找割点

    题意: 给你一个无向图,你需要找出来其中有几个割点 割点/割项: 1.u不为搜索起点,low[v]>=dfn[u] 2.u为搜索起点,size[ch]>=2 3.一般情况下,不建议在tar ...

  3. Splits CodeForces - 964A

    题意: 我们定义一个不上升的且和为 n 的正整数序列,叫做 n 的分解. 比如, 下面是8的分解: [4, 4], [3, 3, 2], [2, 2, 1, 1, 1, 1], [5, 2, 1]. ...

  4. CF1400-D. Zigzags

    CF1400-D. Zigzags 题意: 给出一个由\(n\)个数字构成的数组\(a\),让你在这个数组中找出有多少个符合以下要求的元组\((i,j,k,l)\): 1. \(i<j<k ...

  5. K8S(03)核心插件-Flannel网络插件

    系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 K8S核心网络插件Flannel 目录 系列文 ...

  6. 操作系统 part3

    1.操作系统四特性 并发:一个时间段,多个进程在宏观上同时运行 共享:系统中的资源可以被多个并发进程共同使用(互斥共享,同时共享) 虚拟:利用多道程序设计,利用时分复用(分时系统)和空分复用(虚拟内存 ...

  7. sql-libs(2) 数字型

    经测试,发现是数字型的注入,直接 and 1=1 返回正常,and1=2返回错误,感觉比第一关更加简单一点啊,,透~ 经测试order by 为 3 . 1. union 注入 http://192. ...

  8. git push bug

    git push bug fast-forwards $ git push $ git push --help # git pull $ gp To http://git.xgqfrms.xyz:88 ...

  9. Web Design Trends for 2017

    Web Design Trends for 2017 https://www.awwwards.com/web-design-trends-for-2017.html https://usersnap ...

  10. Chrome new features preview

    Chrome new features preview CSS Overview https://css-tricks.com/new-in-chrome-css-overview/ capture ...