File tree Expand file tree Collapse file tree 1 file changed +54
-4
lines changed Expand file tree Collapse file tree 1 file changed +54
-4
lines changed Original file line number Diff line number Diff line change 5
5
6
6
## 题目大意
7
7
8
- 给定一个正整数 ` target ` 。
8
+ ** 描述 ** : 给定一个正整数 ` target ` 。
9
9
10
- 要求:输出所有和为 ` target ` 的连续正整数序列(至少含有两个数)。序列中的数字由小到大排列,不同序列按照首个数字从小到大排列。
10
+ ** 要求** :输出所有和为 ` target ` 的连续正整数序列(至少含有两个数)。序列中的数字由小到大排列,不同序列按照首个数字从小到大排列。
11
+
12
+ ** 说明** :
13
+
14
+ - $1 \le target \le 10^5$。
15
+
16
+ ** 示例** :
17
+
18
+ ``` Python
19
+ 输入 target = 9
20
+ 输出 [[2 ,3 ,4 ],[4 ,5 ]]
21
+ ```
11
22
12
23
## 解题思路
13
24
14
- 滑动窗口求解。具体做法如下:
25
+ ### 思路 1:枚举算法
26
+
27
+ 连续正整数序列中元素的最小值大于等于 ` 1 ` ,而最大值不会超过 ` target ` 。所以我们可以枚举可行的区间,并计算出区间和,将其与 ` target ` 进行比较,如果相等则将对应的区间元素加入答案数组中,最终返回答案数组。
28
+
29
+ 因为题目要求至少含有两个数,则序列开始元素不会超过 ` target ` 的一半,所以序列开始元素可以从 ` 1 ` 开始,枚举到 ` target // 2 ` 即可。
30
+
31
+ 具体步骤如下:
32
+
33
+ - 使用列表变量 ` res ` 作为答案数组。
34
+ - 使用一重循环 ` i ` ,用于枚举序列开始位置,枚举范围为 ` [1, target // 2] ` 。
35
+ - 使用变量 ` cur_sum ` 维护当前区间的区间和,` cur_sum ` 初始为 ` 0 ` 。
36
+ - 使用第 ` 2 ` 重循环 ` j ` ,用于枚举序列的结束位置,枚举范围为 ` [i, target - 1] ` ,并累积计算当前区间的区间和,即 ` cur_sum += j ` 。
37
+ - 如果当前区间的区间和大于 ` target ` ,则跳出循环。
38
+ - 如果当前区间的区间和等于 ` target ` ,则将区间上的元素保存为列表,并添加到答案数组中,然后跳出第 ` 2 ` 重循环。
39
+ - 遍历完返回答案数组。
40
+
41
+ ### 思路 1:代码
42
+
43
+ ``` Python
44
+ class Solution :
45
+ def findContinuousSequence (self , target : int ) -> List[List[int ]]:
46
+ res = []
47
+ for i in range (1 , target // 2 + 1 ):
48
+ cur_sum = 0
49
+ for j in range (i, target):
50
+ cur_sum += j
51
+ if cur_sum > target:
52
+ break
53
+ if cur_sum == target:
54
+ cur_res = []
55
+ for k in range (i, j + 1 ):
56
+ cur_res.append(k)
57
+ res.append(cur_res)
58
+ break
59
+ return res
60
+ ```
61
+
62
+ ### 思路 2:滑动窗口
63
+
64
+ 具体做法如下:
15
65
16
66
- 初始化窗口,令 ` left = 1 ` ,` right = 2 ` 。
17
67
- 计算 ` sum = (left + right) * (right - left + 1) // 2 ` 。
20
70
- 如果 ` sum > target ` 时,说明需要缩小窗口,则 ` left += 1 ` 。
21
71
- 直到 ` left >= right ` 时停止,返回答案数组。
22
72
23
- ## 代码
73
+ ### 思路 2:滑动窗口代码
24
74
25
75
``` Python
26
76
class Solution :
You can’t perform that action at this time.
0 commit comments