Skip to content

Commit e57885a

Browse files
committed
add new files
1 parent 34590eb commit e57885a

6 files changed

+145
-0
lines changed

Diff for: 14. Longest Common Prefix.go

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
import "math"
4+
5+
func longestCommonPrefix(strs []string) string {
6+
if len(strs) == 0 {
7+
return ""
8+
}
9+
minLen := math.MaxInt32
10+
minStr := ""
11+
for _, v := range strs {
12+
l := len(v)
13+
if l < minLen {
14+
minLen = l
15+
minStr = v
16+
}
17+
}
18+
long := len(minStr)
19+
for _, v := range strs {
20+
for i := 0; i < minLen; i++ {
21+
if minStr[i:i+1] != v[i:i+1] {
22+
long = int(math.Min(float64(long), float64(i)))
23+
}
24+
}
25+
}
26+
return minStr[:long]
27+
}

Diff for: 15. 3Sum.go

+37
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package main
2+
3+
import "sort"
4+
5+
func threeSum(nums []int) [][]int {
6+
sort.Ints(nums)
7+
res := make([][]int, 0)
8+
f := func(nums []int, begin int, end int, target int) {
9+
for begin < end {
10+
if nums[begin]+nums[end]+target == 0 {
11+
r := make([]int, 0)
12+
r = append(r, nums[begin], nums[end], target)
13+
res = append(res, r)
14+
for begin < end && nums[begin] == nums[begin+1] {
15+
begin++
16+
}
17+
for begin < end && nums[end] == nums[end-1] {
18+
end--
19+
}
20+
begin++
21+
end--
22+
} else if (target + nums[begin] + nums[end]) < 0 {
23+
begin++
24+
} else {
25+
end--
26+
}
27+
}
28+
}
29+
l := len(nums)
30+
for i := 0; i < l-2; i++ {
31+
if i > 0 && nums[i] == nums[i-1] {
32+
continue
33+
}
34+
f(nums, i+1, l-1, nums[i])
35+
}
36+
return res
37+
}

Diff for: 19. Remove Nth Node From End of List.go

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package main
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
/**
9+
* 快慢指针
10+
*/
11+
func removeNthFromEnd(head *ListNode, n int) *ListNode {
12+
cur := head
13+
last := head
14+
for i := 0; i < n; i++ {
15+
if cur.Next != nil {
16+
cur = cur.Next
17+
} else {
18+
return head.Next
19+
}
20+
}
21+
for cur.Next != nil {
22+
cur = cur.Next
23+
last = last.Next
24+
}
25+
last.Next = last.Next.Next
26+
return head
27+
}

Diff for: 21. Merge Two Sorted Lists.go

+23
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package main
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
9+
if l1 == nil {
10+
return l2
11+
}
12+
if l2 == nil {
13+
return l1
14+
}
15+
if l1.Val < l2.Val {
16+
l1.Next = mergeTwoLists(l1.Next, l2)
17+
return l1
18+
} else {
19+
l2.Next = mergeTwoLists(l1, l2.Next)
20+
return l2
21+
}
22+
23+
}

Diff for: 26. Remove Duplicates from Sorted Array.go

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package main
2+
3+
func removeDuplicates(nums []int) int {
4+
for i, j := 0, 1; i < j && j < len(nums); {
5+
if nums[j] == nums[i] {
6+
nums = append(nums[:i], nums[i+1:]...)
7+
j--
8+
i--
9+
}
10+
j++
11+
i++
12+
}
13+
return len(nums)
14+
}

Diff for: 27. Remove Element.go

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
func removeElement(nums []int, val int) int {
4+
5+
if nums == nil {
6+
return 0
7+
}
8+
for i := 0; i < len(nums); {
9+
if nums[i] == val {
10+
nums = append(nums[:i], nums[i+1:]...)
11+
i--
12+
}
13+
i++
14+
}
15+
return len(nums)
16+
17+
}

0 commit comments

Comments
 (0)