题目:输入一个正数n,输出所有和为n 连续正数序列。
例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5、4-6 和7-8。
思路:
就简单的方法就是两重循环,
算这两个标志之间的和!
代码:
public static int sum(int begin, int end) {
return ((end - begin + 1) * (begin + end)) / 2;
}
public static void find(int number) {
for (int i = 1; i < number; i++) {
for (int j = i + 1; j < number; j++) {
if (sum(i, j) == number) {
System.out.println("From " + i + " to " + j);
}
}
}
}
但是很明显,这个方法每次要重复算的!
算1-3的和其实暗含多算一次1-2!
以15为例子,
我们最多算到8!
因为再往后,任意连续的两个数的和都大于15!
我们使用sum保持当前计算的数的和,并跟进sum和number的大小来改变其数值和进行相关的入队和出队!
像找15,
那么
1入队,和为1<15,那么继续入队
2入队,和为3<15,继续入队
。
。
。
直到5入队,和为15=15,那么输出对头标志和队尾标志,表面之间的数相加等于所要求的数,然后出队,并让sum减去对头,sum此时为14,则继续入队
6入队,和为20>15,那么出队,减去队头2,sum为为18>15,则继续出队,减去队头3,sum为15=15,符合条件,则出队,减去队头~
重复上诉操作,直到进队的数等于结束的数或者sum<15!
代码:
int number = 15;
int end = (number+1)/2;
System.out.println(end);
int[] queue = new int[number];
int head = 0;
int tail = 0;
int index = 1;
int sum = 0;
do {
if (sum < number) {
queue[tail++] = index;
sum += index;
System.out.println(index + ":" + sum);
index++;
}
if (sum == number) {
System.out.println("From " + (head + 1) + " to " + tail);
sum -= queue[head];
head++;
} else if (sum > number) {
sum -= queue[head];
head++;
if (sum == number) {
System.out.println("From " + (head + 1) + " to " + tail);
sum -= queue[head];
head++;
}
}
} while (index <= end || sum > number);
分享到:
相关推荐
# 输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 # 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 # 输入示例 # 输入:target = 9 # 输出:[[2,3,4],[4,5]...
本题目的核心在于如何高效地找到一个序列中所有连续子序列的最大和。如果序列中的所有元素都是负数,则最大子段和定义为0。 ### 题目解析 #### 输入格式 输入首先给出一个整数`C`(`C ),表示后续有`C`组测试数据...
题目 "和为s的连续正数序列1" 是一道典型的滑动窗口问题,来源于LeetCode。这道题目要求我们找到所有连续正整数序列,使得它们的和等于给定的目标值`target`。序列需要按升序排列,而且不同的序列需要按照首元素的...
57.2 和为 S 的连续正数序列题目描述牛客网题目描述输出所有和为 S 的连续正数序列。例如和为 100 的连续序列有:[9, 10, 11, 12, 13,
和为S的连续正数序列.md
输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列。 示例 1: 输入:target = 9 输出:[[2,3,4],[4,5]] 示例 2: ...
面试题57 - II. 和为s的连续正数序列输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数)。示例 1:输出:[
c++ c++_剑指offfer题解之和为s的连续正数序列
python python_剑指offer第41题和为S的连续正数序列
在C语言编程中,计算两个正整数之间所有数的和是一个常见的问题,这涉及到基本的数学计算和循环控制结构。下面将详细解释如何通过C语言实现这个功能,并结合给出的标题和描述来分析这个问题。 首先,我们需要从键盘...
标题中的“统计第一个零数据后的各数据中正数及负数的个数”是指在给定的数据序列(BUF字数据区)中,找到第一个零值的位置,然后统计从该位置开始,后续数据中正数和负数的个数。这个任务涉及到编程语言中的循环...
在IT领域,特别是算法设计和分析中,"连续子序列最大和与乘积问题"是一个经典的话题。这类问题经常出现在数据结构和算法的面试中,也是优化和解决复杂计算问题的关键。本文将深入探讨这个问题,并结合提供的Java源码...
用python实现,随便输入一个序列(乱序),判断这个序列是否是图序列,如果是,输出图形(有脚标)。
使用list,最简短的代码,输入一个正数n,输出所有和为n的连续正数序列,结果添加到list中
- 定义一个整数数组存储输入的数字。 - 使用双重循环实现冒泡排序,根据`compareInt`方法进行排序。 - 按照排序后的顺序输出所有数字。 - **自定义比较方法:** - 将两个整数转换为字符串形式。 - 将两个字符...
但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? ...
1.5.10. 输入一个正数 n,输出所有和为 n 连续正数序列 ................................125 1.6. 面试题集合(五) .......................................................................................126...
示例 1:输出:[[2,3,4],[4,5]]示例 2:输出:[[1,2,3,4,5],[4,5,6],[7,8]]限制:方法:双指针法求出两个指针中间数的总和
例如,如果你有一个名为A的表,其ID字段作为主键,你可以先创建一个序列SEQ_A,然后创建一个触发器TRG_A,确保每当有新数据插入表A时,ID字段都能自动获取序列的下一个值。这样就避免了手动为每个新行分配唯一ID的...