Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 5bc7e55

Browse files
author
陈世伟
committed
Merge branch 'master' of github.com:chen-shiwei/leetcode
2 parents bed8590 + 9d2241a commit 5bc7e55

File tree

10 files changed

+395
-3
lines changed

10 files changed

+395
-3
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package _09_长度最小的子数组
2+
3+
import "math"
4+
5+
// 暴力法 双for
6+
func minSubArrayLenViolence(target int, nums []int) int {
7+
l := len(nums)
8+
9+
var minLen = math.MaxInt32
10+
for i := 0; i < l; i++ {
11+
var sum int
12+
for j := i; j < l; j++ {
13+
sum += nums[i]
14+
if subLen := j - i + 1; sum >= target && subLen < minLen {
15+
minLen = subLen
16+
break
17+
}
18+
}
19+
}
20+
21+
if minLen == math.MaxInt32 {
22+
return 0
23+
}
24+
return minLen
25+
}
26+
27+
func minSubArrayLenSlidingWindow(target int, nums []int) int {
28+
29+
var left, right int
30+
l := len(nums)
31+
minLen := math.MaxInt32
32+
33+
// 双指针滑动
34+
// right 移动控制是sum 增加
35+
// left 指针当sum >=target 时候更新 minlen 并向前移动
36+
var sum int
37+
for ; right < l; right++ {
38+
sum += nums[right]
39+
for sum >= target {
40+
subLen := right - left + 1
41+
if subLen < minLen {
42+
minLen = subLen
43+
}
44+
sum -= nums[left]
45+
left++
46+
}
47+
}
48+
49+
if minLen == math.MaxInt32 {
50+
return 0
51+
}
52+
53+
return minLen
54+
55+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package _09_长度最小的子数组
2+
3+
import "testing"
4+
5+
func Test_minSubArrayLenViolence(t *testing.T) {
6+
type args struct {
7+
target int
8+
nums []int
9+
}
10+
tests := []struct {
11+
name string
12+
args args
13+
want int
14+
}{
15+
{name: `输入:target = 7, nums = [2,3,1,2,4,3]
16+
输出:2
17+
解释:子数组 [4,3] 是该条件下的长度最小的子数组。`, args: args{
18+
target: 7,
19+
nums: []int{2, 3, 1, 2, 4, 3},
20+
}, want: 2},
21+
{name: `输入:target = 4, nums = [1,4,4]
22+
输出:1`, args: args{
23+
target: 4,
24+
nums: []int{1, 4, 4},
25+
}, want: 1},
26+
{name: `输入:target = 11, nums = [1,1,1,1,1,1,1,1]
27+
输出:0`, args: args{
28+
target: 11,
29+
nums: []int{1, 1, 1, 1, 1, 1, 1, 1},
30+
}, want: 0},
31+
}
32+
for _, tt := range tests {
33+
t.Run(tt.name, func(t *testing.T) {
34+
if got := minSubArrayLenViolence(tt.args.target, tt.args.nums); got != tt.want {
35+
t.Errorf("minSubArrayLenViolence() = %v, want %v", got, tt.want)
36+
}
37+
if got := minSubArrayLenSlidingWindow(tt.args.target, tt.args.nums); got != tt.want {
38+
t.Errorf("minSubArrayLenSlidingWindow() = %v, want %v", got, tt.want)
39+
}
40+
})
41+
}
42+
}

‎leetcode/26.删除有序数组中的重复项/removeDuplicates.go‎

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,27 @@
1-
package _6_删除有序数组中的重复项
1+
package _26_删除有序数组中的重复项
22

33
func removeDuplicates(nums []int) int {
44
l := len(nums)
5+
if l < 2 {
6+
return l
7+
}
8+
9+
var i, j = 0, 1
10+
11+
for j < l {
12+
if nums[i] == nums[j] {
13+
nums = append(nums[:i], nums[i+1:]...)
14+
l--
15+
} else {
16+
i++
17+
j++
18+
}
19+
}
20+
21+
return len(nums)
22+
}
23+
func removeDuplicates1(nums []int) int {
24+
l := len(nums)
525

626
// 第一个数和之前不重复,不用覆盖
727
var slow = 1

‎leetcode/26.删除有序数组中的重复项/removeDuplicates_test.go‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package _6_删除有序数组中的重复项
1+
package _26_删除有序数组中的重复项
22

33
import "testing"
44

@@ -13,7 +13,8 @@ func Test_removeDuplicates(t *testing.T) {
1313
}{
1414
{name: `输入:nums = [1,1,2]
1515
输出:2, nums = [1,2]
16-
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。`, args: args{nums: []int{1, 1, 2}}, want: 2},
16+
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。
17+
`, args: args{nums: []int{1, 1, 2}}, want: 2},
1718
{name: `输入:nums = [0,0,1,1,1,2,2,3,3,4]
1819
输出:5, nums = [0,1,2,3,4]
1920
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。`, args: args{nums: []int{0, 0, 1, 1, 1, 2, 2, 3, 3, 4}}, want: 5},
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package _54_螺旋矩阵
2+
3+
func spiralOrder(matrix [][]int) []int {
4+
var slides = [][]int{{0, 1}, {1, 0}, {0, -1}, {-1, 0}}
5+
var slidesIdx = 0
6+
rows := len(matrix)
7+
cols := len(matrix[0])
8+
var i, j int
9+
visited := make([][]bool, rows)
10+
11+
for index := range visited {
12+
visited[index] = make([]bool, cols)
13+
}
14+
var result []int
15+
16+
for start, end := 1, rows*cols; start <= end; start++ {
17+
result = append(result, matrix[i][j])
18+
visited[i][j] = true
19+
nextI, nextJ := slides[slidesIdx][0]+i, slides[slidesIdx][1]+j
20+
if nextI < 0 || nextJ < 0 || nextI >= rows || nextJ >= cols || visited[nextI][nextJ] {
21+
slidesIdx = (slidesIdx + 1) % 4
22+
}
23+
i, j = slides[slidesIdx][0]+i, slides[slidesIdx][1]+j
24+
}
25+
26+
return result
27+
28+
}
29+
func spiralOrder1(matrix [][]int) []int {
30+
rows := len(matrix)
31+
cols := len(matrix[0])
32+
left, right, top, bottom := 0, cols-1, 0, rows-1
33+
end := rows * cols
34+
var result []int
35+
for start := 1; start <= end; {
36+
for i := left; i <= right; i++ {
37+
result = append(result, matrix[top][i])
38+
start++
39+
}
40+
top++
41+
if top > bottom {
42+
break
43+
}
44+
for i := top; i <= bottom; i++ {
45+
result = append(result, matrix[i][right])
46+
start++
47+
}
48+
right--
49+
if right < left {
50+
break
51+
}
52+
for i := right; i >= left; i-- {
53+
result = append(result, matrix[bottom][i])
54+
start++
55+
}
56+
bottom--
57+
if bottom < top {
58+
break
59+
}
60+
for i := bottom; i >= top; i-- {
61+
result = append(result, matrix[i][left])
62+
start++
63+
}
64+
left++
65+
if left > right {
66+
break
67+
}
68+
}
69+
70+
return result
71+
72+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package _54_螺旋矩阵
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func Test_spiralOrder(t *testing.T) {
9+
type args struct {
10+
matrix [][]int
11+
}
12+
tests := []struct {
13+
name string
14+
args args
15+
want []int
16+
}{
17+
{name: `输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
18+
输出:[1,2,3,6,9,8,7,4,5]`, args: args{matrix: [][]int{
19+
{1, 2, 3},
20+
{4, 5, 6},
21+
{7, 8, 9},
22+
}}, want: []int{1, 2, 3, 6, 9, 8, 7, 4, 5}},
23+
{name: `[[1,2,3,4],[5,6,7,8],[9,10,11,12]]`, args: args{matrix: [][]int{
24+
{1, 2, 3, 4},
25+
{5, 6, 7, 8},
26+
{9, 10, 11, 12},
27+
}}, want: []int{1, 2, 3, 4, 8, 12, 11, 10, 9, 5, 6, 7}},
28+
}
29+
for _, tt := range tests {
30+
t.Run(tt.name, func(t *testing.T) {
31+
if got := spiralOrder(tt.args.matrix); !reflect.DeepEqual(got, tt.want) {
32+
t.Errorf("spiralOrder() = %v, want %v", got, tt.want)
33+
}
34+
if got := spiralOrder1(tt.args.matrix); !reflect.DeepEqual(got, tt.want) {
35+
t.Errorf("spiralOrder1() = %v, want %v", got, tt.want)
36+
}
37+
})
38+
}
39+
}
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
package _9_螺旋矩阵II
2+
3+
func generateMatrix(n int) [][]int {
4+
5+
result := make([][]int, n)
6+
7+
for i := range result {
8+
result[i] = make([]int, n)
9+
}
10+
11+
var start, end = 1, n * n
12+
var (
13+
left = 0
14+
right = n - 1
15+
top = 0
16+
bottom = n - 1
17+
)
18+
// left -> right
19+
// top -> bottom
20+
// right -> left
21+
// bottom -> top
22+
23+
for start <= end {
24+
for i := left; i <= right; i++ {
25+
result[top][i] = start
26+
start++
27+
}
28+
top++
29+
if top > bottom {
30+
break
31+
}
32+
for i := top; i <= bottom; i++ {
33+
result[i][right] = start
34+
start++
35+
}
36+
right--
37+
if right < left {
38+
break
39+
}
40+
for i := right; i >= left; i-- {
41+
result[bottom][i] = start
42+
start++
43+
}
44+
bottom--
45+
if bottom < top {
46+
break
47+
}
48+
for i := bottom; i >= top; i-- {
49+
result[i][left] = start
50+
start++
51+
}
52+
left++
53+
if left > right {
54+
break
55+
}
56+
}
57+
58+
return result
59+
}
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package _9_螺旋矩阵II
2+
3+
import (
4+
"reflect"
5+
"testing"
6+
)
7+
8+
func Test_generateMatrix(t *testing.T) {
9+
type args struct {
10+
n int
11+
}
12+
tests := []struct {
13+
name string
14+
args args
15+
want [][]int
16+
}{
17+
{name: `输入:n = 3
18+
输出:[[1,2,3],[8,9,4],[7,6,5]]`, args: args{n: 3}, want: [][]int{
19+
{1, 2, 3},
20+
{8, 9, 4},
21+
{7, 6, 5},
22+
}},
23+
}
24+
for _, tt := range tests {
25+
t.Run(tt.name, func(t *testing.T) {
26+
if got := generateMatrix(tt.args.n); !reflect.DeepEqual(got, tt.want) {
27+
t.Errorf("generateMatrix() = %v, want %v", got, tt.want)
28+
}
29+
})
30+
}
31+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /