代码随想录数组 02

1. 209.长度最小的子数组

题目链接: LeetCode 209.长度最小的子数组

思路

试图暴力破解结果超时,考虑使用滑动窗口

我的解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func minSubArrayLen(target int, nums []int) int {
n := len(nums)
left, sum := 0, 0
ans := n + 1

for right := 0; right < n; right++ {
sum += nums[right]

for sum >= target {
if right-left+1 < ans {
ans = right - left + 1
}
sum -= nums[left]
left++
}
}

if ans == n+1 {
return 0
}
return ans
}

Carl 的题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
func minSubArrayLen(target int, nums []int) int {
i := 0
l := len(nums) // 数组长度
sum := 0 // 子数组之和
result := l + 1 // 初始化返回长度为l+1,目的是为了判断“不存在符合条件的子数组,返回0”的情况
for j := 0; j < l; j++ {
sum += nums[j]
for sum >= target {
subLength := j - i + 1
if subLength < result {
result = subLength
}
sum -= nums[i]
i++
}
}
if result == l+1 {
return 0
} else {
return result
}
}

2. 59. 螺旋矩阵 II

题目链接: LeetCode 59. 螺旋矩阵 II

解法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
func generateMatrix(n int) [][]int {
startx, starty := 0, 0
count := 1
loop := n/2
matrix := make([][]int, n)
offset := 1
mid := n/2
for i := range matrix {
matrix[i] = make([]int, n)
}
for loop > 0{
i := startx
j := starty
for ; j < n - offset; j++{
matrix[i][j] = count
count++
}
for ; i < n - offset; i++{
matrix[i][j] = count
count++
}
for ; j > starty; j--{
matrix[i][j] = count
count++
}
for ; i > startx; i--{
matrix[i][j] = count
count++
}
startx++
starty++
offset++
loop--
}

if n % 2 == 1{
matrix[mid][mid] = count
}
return matrix
}

核心思路


学习资源


更新日期: 2026-02-12