剑指 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. 2019ICPC南昌邀请赛 Sequence

    题意:给出n个点的权值,m次操作,操作为1时为询问,每次询问给出 l 和 r ,求 f(l,r).操作为0时为修改权值.f(l,r)=f(l,l)⊕f(l,l+1)⊕⋯⊕f(l,r)⊕f(l+1,l+ ...

  2. Chocolate Bunny CodeForces - 1407C 思维

    题意: 交互题 题目输入一个n,你需要输出一个满足要求的[1,n]的排列. 你可以最多询问2*n次来确定你要输出的排列·中每一个位置的值 每一次询问格式为"? a b" 它会回复你 ...

  3. Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence (数学,差分)

    题意:有一长度为\(n\)的数组,求一子序列,要求子序列中两两差的绝对值最大,并且子序列尽可能短. 题解:将数组看成坐标轴上的点,其实就是求每个单调区间的端点,用差分数组来判断单调性. 代码: #in ...

  4. Codeforces Round #527 (Div. 3) C. Prefixes and Suffixes (思维,字符串)

    题意:给你某个字符串的\(n-1\)个前缀和\(n-1\)个后缀,保证每个所给的前缀后缀长度从\([1,n-1]\)都有,问你所给的子串是前缀还是后缀. 题解:这题最关键的是那两个长度为\(n-1\) ...

  5. nginx+lua实现灰度发布/waf防火墙

    nginx+lua 实现灰度发布 waf防火墙 课程链接:[课程]Nginx 与 Lua 实现灰度发布与 WAF 防火墙(完)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili 参考博客 Nginx ...

  6. Keepalived+LVS实现LNMP网站的高可用部署

    Keepalived+LVS实现LNMP网站的高可用部署   项目需求   当我们访问某个网站的时候可以在浏览器中输入IP或者域名链接到Web Server进行访问,如果这个Web Server挂了, ...

  7. CentOS7安装配置 NFS

    一.NFS 简介 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源.在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端N ...

  8. Leetcode(13)-罗马数字转整数

    罗马数字包含以下七种字符:I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 罗马数字 2 写做 II ,即为两个并列 ...

  9. POJ1273 最大流模板

    之前自己写的,以后当一个模板的基础吧,不管是最大流,最小割,二分图匹配 下面是POJ1273的一个裸题.. 1 #include <iostream> 2 #include <cst ...

  10. MDN All In One

    MDN All In One https://github.com/mdn/ https://wiki.mozilla.org/MDN MDN 要凉了 https://developer.mozill ...