Skip to content

Commit c49ee98

Browse files
committed
2026-03-27 21:33
1 parent a4e68fa commit c49ee98

14 files changed

Lines changed: 245 additions & 73 deletions

File tree

src/p/leetcode/index.rst

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,9 @@ Invert Binary Tree
277277
:key: 二叉树
278278
:date: 2021-07-07 2026-03-23
279279

280-
我能去 Google 了吗?[#]_
280+
我能 `去 Google`__ 了吗?
281+
282+
__ https://twitter.com/mxcl/status/608682016205344768
281283

282284
Best Time to Buy and Sell Stock II
283285
----------------------------------
@@ -636,7 +638,7 @@ Trapping Rain Water
636638

637639
`L[i]`, `R[i]` 为以第 `i` 格为中心,左右的最高点的高度,每一格可能容纳的水量为 `W[i] = min(L[i], R[i]) - Height[i]`。
638640

639-
单调栈 [#]_
641+
`单调栈 <https://oi-wiki.org/ds/monotonous-stack/>`_
640642
利用单调栈的性质,维护一个由高到低的水洼左边,每次 pop 的时候,算该水洼里的一层水
641643

642644
.. todo:: 还有 :math:`O(1)` 解法…… 歇会儿。
@@ -683,7 +685,7 @@ Reverse Linked List
683685
:diffculty: Easy
684686
:language: go
685687
:key: 链表
686-
:date: 2021-07-16
688+
:date: 2021-07-16 2026-03-23
687689
:reference: https://zhuanlan.zhihu.com/p/86745433
688690

689691
:del:`没啥好说`。
@@ -891,8 +893,6 @@ Ones and Zeroes
891893

892894
.. rubric:: 脚注
893895

894-
.. [#] https://twitter.com/mxcl/status/608682016205344768
895-
.. [#] https://oi-wiki.org/ds/monotonous-stack/
896896

897897
Merge Sorted Array
898898
------------------
@@ -905,3 +905,63 @@ Merge Sorted Array
905905
:date: 2026-03-05
906906

907907
很简单的一道题,要不先把 nums1 挪开然后直接合并,要不逆序。之前想复杂了。
908+
909+
Remove Element
910+
--------------
911+
912+
.. leetcode:: _
913+
:id: remove-element
914+
:diffculty: Easy
915+
:language: go
916+
:key: 数组
917+
:date: 2026-03-27
918+
919+
Remove Duplicates From Sorted Array
920+
-----------------------------------
921+
922+
.. leetcode:: _
923+
:id: remove-duplicates-from-sorted-array
924+
:diffculty: Easy
925+
:language: go
926+
:key: 数组
927+
:date: 2026-03-27
928+
929+
Remove Duplicates From Sorted Array II
930+
--------------------------------------
931+
932+
.. leetcode:: _
933+
:id: remove-duplicates-from-sorted-array-ii
934+
:diffculty: Medium
935+
:language: go
936+
:key: 数组
937+
:date: 2026-03-27
938+
939+
Majority Element
940+
----------------
941+
942+
.. leetcode:: _
943+
:id: majority-element
944+
:diffculty: Easy
945+
:language: go
946+
:key: 数组
947+
:date: 2026-03-27
948+
949+
Boyer-Moore 算法。
950+
951+
原理是:每次遇到两个不同的元素,就把它们“配对删除”。
952+
最坏的情况是每个 Majority Element 都和其他的元素配对了被删除,但也会剩下一个。
953+
954+
Rotate Array
955+
------------
956+
957+
.. leetcode:: _
958+
:id: rotate-array
959+
:diffculty: Medium
960+
:language: go
961+
:key: 数组
962+
:date: 2026-03-27
963+
964+
i 位置的元素往右挪动 k 个位置,被修改的下标序列会组成一个环:
965+
`[i, (i+k)%n (i+2k)%n, ... i]`。存在 `(i+x*k)%n == i`,即 `(x*k)%n == 0`。
966+
967+
.. todo:: 环的数目为 `gcd(n, k)`
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module majority-element
2+
3+
go 1.26.1
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func majorityElement(nums []int) int {
6+
var candicate, count int
7+
for i := 0; i < len(nums); i++ {
8+
if count == 0 {
9+
candicate = nums[i]
10+
count = 1
11+
} else {
12+
if candicate == nums[i] {
13+
count++
14+
} else {
15+
count--
16+
}
17+
}
18+
}
19+
return candicate
20+
}
21+
22+
func main() {
23+
fmt.Println(majorityElement([]int{2,2,1,1,1,2,2}))
24+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module maximum-subarray
2+
3+
go 1.26.1
Lines changed: 10 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,19 @@
11
package main
22

33
// import "fmt"
4-
5-
func maxSubArray(nums []int) int {
6-
max := nums[0]
7-
m := make([]int, len(nums))
8-
for i, v := range nums {
9-
if i == 0 || m[i-1] < 0 {
10-
m[i] = v
11-
} else if m[i-1]+v < 0 {
12-
m[i] = v
13-
} else {
14-
m[i] = m[i-1] + v
15-
}
16-
if m[i] > max {
17-
max = m[i]
18-
}
19-
}
20-
return max
21-
}
22-
23-
func maxSubArray_Conquer(nums []int, left bool) (int, int) {
24-
if len(nums) == 1 {
25-
// fmt.Println(nums, nums[0], nums[0], left)
26-
return nums[0], nums[0]
27-
}
28-
lmax, lmid := maxSubArray_Conquer(nums[:len(nums)/2], true)
29-
rmax, rmid := maxSubArray_Conquer(nums[len(nums)/2:], false)
30-
max := lmid + rmid
31-
if lmax > max {
32-
max = lmax
33-
}
34-
if rmax > max {
35-
max = rmax
36-
}
37-
var mid int
38-
if left {
39-
var tmp int
40-
mid = nums[len(nums)-1]
41-
for i := len(nums) - 1; i >= 0; i-- {
42-
tmp += nums[i]
43-
if tmp > mid {
44-
mid = tmp
45-
}
46-
}
47-
} else {
48-
var tmp int
49-
mid = nums[0]
50-
for i := 0; i < len(nums); i++ {
51-
tmp += nums[i]
52-
if tmp > mid {
53-
mid = tmp
4+
import "math"
5+
6+
func maxSubArray_Foolish(nums []int) int {
7+
max := -math.MaxInt64
8+
for i := 0; i < len(nums); i ++ {
9+
sum := 0
10+
for j := i; j < len(nums); j++ {
11+
sum += nums[j]
12+
if sum > max {
13+
max = sum
5414
}
5515
}
5616
}
57-
58-
// fmt.Println(nums, max, mid, left)
59-
return max, mid
60-
}
61-
62-
func maxSubArray_Divide(nums []int) int {
63-
max, _ := maxSubArray_Conquer(nums, true)
6417
return max
6518
}
6619

@@ -73,15 +26,4 @@ func main() {
7326
println(maxSubArray([]int{-1, 1, 2, 3, -1}))
7427
println(maxSubArray([]int{-2, -3, -1}))
7528
println(maxSubArray([]int{8, -19, 5, -4, 20}))
76-
77-
println("------------")
78-
79-
println(maxSubArray_Divide([]int{-2, 1, -3, 4, -1, 2, 1, -5, 4}))
80-
println(maxSubArray_Divide([]int{-1, -1, -1, -1}))
81-
println(maxSubArray_Divide([]int{1}))
82-
println(maxSubArray_Divide([]int{1, 2, 3}))
83-
println(maxSubArray_Divide([]int{1, 2, 3, -1}))
84-
println(maxSubArray_Divide([]int{-1, 1, 2, 3, -1}))
85-
println(maxSubArray_Divide([]int{-2, -3, -1}))
86-
println(maxSubArray_Divide([]int{8, -19, 5, -4, 20}))
8729
}

src/p/leetcode/new-problem.sh

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ $title_delim
1717
EOF
1818

1919
mkdir $1
20+
cd $1
21+
go mod init $1
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module remove-duplicates-from-sorted-array-ii
2+
3+
go 1.26.1
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func removeDuplicates(nums []int) int {
6+
if len(nums) < 3 {
7+
return len(nums)
8+
}
9+
ptr := 1
10+
for i := 2; i < len(nums); i++ {
11+
if nums[i] == nums[ptr] && nums[i] == nums[ptr-1]{
12+
continue
13+
} else {
14+
ptr++
15+
nums[ptr] = nums[i]
16+
}
17+
}
18+
return ptr+1
19+
}
20+
21+
22+
func main() {
23+
nums := []int{0,0,1,1,1,1,2,3,3}
24+
k := removeDuplicates(nums)
25+
fmt.Println(k)
26+
fmt.Println(nums[:k])
27+
nums = []int{0}
28+
k = removeDuplicates(nums)
29+
fmt.Println(k)
30+
fmt.Println(nums[:k])
31+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module remove-duplicates-from-sorted-array
2+
3+
go 1.26.1
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package main
2+
3+
import "fmt"
4+
5+
func removeDuplicates(nums []int) int {
6+
ptr := 0
7+
for i := 1; i < len(nums); i++ {
8+
if nums[i] == nums[ptr] {
9+
continue
10+
} else {
11+
ptr++
12+
nums[ptr] = nums[i]
13+
}
14+
}
15+
return ptr+1
16+
}
17+
18+
func main() {
19+
nums := []int{0,0,1,1,1,2,2,3,3,4}
20+
fmt.Println(removeDuplicates(nums))
21+
}

0 commit comments

Comments
 (0)