剑指 Offer 57 - II. 和为s的连续正数序列 发表于 2022-05-04 Math12345678910111213141516171819202122class Solution { public int[][] findContinuousSequence(int target) { List<int[]> resultList = new ArrayList<>(); for (int i = 1; i <= target / 2; i++) { double j = (-1 + Math.sqrt(1 + 4 * (2L * target + ((long) i * i) - i))) / 2; if (i < j && j == (int) j) { // 题目要求最少含有两个数且避免收集到 [j, i] resultList.add(generateArray(i, (int) j)); } } return resultList.toArray(new int[0][]); } private int[] generateArray(int i, int j) { int[] array = new int[j - i + 1]; for (int k = i; k <= j; k++) { array[k - i] = k; } return array; }} Sliding Window12345678910111213141516171819202122232425262728293031class Solution { public int[][] findContinuousSequence(int target) { List<int[]> resList = new ArrayList<>(); int mid = (target + 1) / 2; int windowSum = 0; int i = 1; for (int j = 1; j <= mid; j++) { windowSum += j; while (windowSum >= target) { if (windowSum == target) { resList.add(generateArray(i, j)); } windowSum -= i; i++; } } return resList.toArray(new int[0][]); } private int[] generateArray(int start, int end) { int[] nums = new int[end - start + 1]; for (int i = start; i <= end; i++) { nums[i - start] = i; } return nums; }} Reference剑指 Offer 57 - II. 和为s的连续正数序列一元二次方程 - 维基百科,自由的百科全书