Skip to content

Commit 80a0222

Browse files
committed
add new files
1 parent 26feb5f commit 80a0222

7 files changed

+193
-0
lines changed

33. Search in Rotated Sorted Array.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package main
2+
3+
func search(nums []int, target int) int {
4+
lo := 0
5+
hi := len(nums) - 1
6+
7+
for lo < hi {
8+
mid := (lo + hi) / 2
9+
if nums[mid] == target {
10+
return mid
11+
}
12+
if nums[lo] <= nums[mid] {
13+
if target >= nums[lo] && target < nums[mid] {
14+
hi = mid - 1
15+
} else {
16+
lo = mid + 1
17+
}
18+
} else {
19+
if target > nums[mid] && target <= nums[hi] {
20+
lo = mid + 1
21+
} else {
22+
hi = mid - 1
23+
}
24+
}
25+
26+
}
27+
if nums[lo] == target {
28+
return lo
29+
} else {
30+
return -1
31+
}
32+
}

35. Search Insert Position.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package main
2+
3+
func searchInsert(nums []int, target int) int {
4+
if target < nums[0] {
5+
return 0
6+
}
7+
l := len(nums)
8+
if target > nums[l-1] {
9+
return l
10+
}
11+
left, right := 0, l-1
12+
for left <= right {
13+
m := (left + right) / 2
14+
if nums[m] > target {
15+
right = m - 1
16+
if right >= 0 {
17+
if nums[right] < target {
18+
return right + 1
19+
}
20+
} else {
21+
return 0
22+
}
23+
} else if nums[m] < target {
24+
left = m + 1
25+
if left < l {
26+
if nums[left] > target {
27+
return left
28+
}
29+
} else {
30+
return l
31+
}
32+
} else {
33+
return m
34+
}
35+
}
36+
return 0
37+
}

38. Count and Say.go

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
import (
4+
"strconv"
5+
)
6+
7+
func countAndSay(n int) string {
8+
if n == 1 {
9+
return "1"
10+
}
11+
return count(countAndSay(n - 1))
12+
}
13+
14+
func count(s string) string {
15+
c := string(s[0])
16+
count := 1
17+
res := ""
18+
for _, char := range s[1:] {
19+
if string(char) == c {
20+
count += 1
21+
} else {
22+
res = res + strconv.Itoa(count) + string(c)
23+
c = string(char)
24+
count = 1
25+
}
26+
}
27+
res = res + strconv.Itoa(count) + string(c)
28+
return res
29+
}

53. Maximum Subarray.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package main
2+
3+
func maxSubArray(nums []int) int {
4+
cur := nums[0]
5+
sum := nums[0]
6+
for i := 1; i < len(nums); i++ {
7+
if sum >= 0 {
8+
sum += nums[i]
9+
} else {
10+
sum = nums[i]
11+
}
12+
if cur < sum {
13+
cur = sum
14+
}
15+
}
16+
return cur
17+
}

56. Merge Intervals.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package main
2+
3+
import (
4+
"sort"
5+
)
6+
7+
type Interval struct {
8+
Start int
9+
End int
10+
}
11+
12+
func merge(intervals []Interval) []Interval {
13+
l := len(intervals)
14+
var (
15+
starts []int
16+
ends []int
17+
res []Interval
18+
)
19+
for _, v := range intervals {
20+
starts = append(starts, v.Start)
21+
ends = append(ends, v.End)
22+
}
23+
sort.Ints(starts)
24+
sort.Ints(ends)
25+
for i, j := 0, 0; i < l; i++ {
26+
if i == l-1 || starts[i+1] > ends[i] { //中间出现了不连续,记录前一个连续值
27+
res = append(res, Interval{Start: starts[j], End: ends[i]})
28+
j = i + 1
29+
}
30+
}
31+
return res
32+
}

58. Length of Last Word.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package main
2+
3+
import (
4+
"strings"
5+
)
6+
7+
func lengthOfLastWord(s string) int {
8+
arr := strings.Split(strings.Trim(s, " "), " ")
9+
length := len(arr)
10+
res := 0
11+
for i := length - 1; i >= 0; i-- {
12+
if arr[i] == " " {
13+
continue
14+
} else {
15+
res = len(arr[i])
16+
break
17+
}
18+
}
19+
return res
20+
}

61. Rotate List.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
package main
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
func rotateRight(head *ListNode, k int) *ListNode {
9+
if head == nil || head.Next == nil || k == 0 {
10+
return head
11+
}
12+
len := 1
13+
tail := head
14+
for tail.Next != nil {
15+
tail = tail.Next
16+
len++
17+
}
18+
tail.Next = head //变成一个环
19+
k = k % len //因为是个环,所以不用转超过一圈
20+
for i := 0; i < len-k; i++ {
21+
tail = tail.Next
22+
}
23+
head = tail.Next
24+
tail.Next = nil
25+
return head
26+
}

0 commit comments

Comments
 (0)