连续正整数数列
题目描述
已知连续正整数数列{K}=K1,K2,K3…Ki的各个数相加之和为S,
i=N (0<S<100000, 0<N<100000), 求此数列K。
输入描述:输入包含两个参数,1)连续正整数数列和S,2)数列里数的个数N。
输出描述:如果有解输出数列K,如果无解输出-1
1 | 示例1: |
解题思路
- 暴力解法。两层for循环遍历。第一层for循环遍历S,第二层以上一层基础起点,
遍历n次,累加和等于S则跳出。时间复杂度:O(sn) - 数学方程式思路。连续的整数和,假设开始的整数为m。
1
2
3S = m + (m+1) + (m+2) + (m+3) + (m+4) + ... + (m+n-1),等差数列求和公式
整理后:s = mn + (n*(0 + n-1)/2)
再整理:m = s/n - (n-1)/2
代码
解法1:暴力解法
1 | public static int[] test(int s, int n) { |
解法2:数学思想
1 | public static int[] test2(int s, int n) { |