Skip to content

Commit 9bd74c2

Browse files
committed
add new files
1 parent 18ad976 commit 9bd74c2

11 files changed

+242
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package main
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
//两个指针,先计算长度,相遇的时候,两个链表的长度一致
9+
func getIntersectionNode(headA, headB *ListNode) *ListNode {
10+
a, b := headA, headB
11+
la, lb := 0, 0
12+
for a != nil {
13+
a = a.Next
14+
la++
15+
}
16+
for b != nil {
17+
b = b.Next
18+
lb++
19+
}
20+
a, b = headA, headB
21+
for la < lb {
22+
b = b.Next
23+
b--
24+
}
25+
for lb < la {
26+
a = a.Next
27+
a--
28+
}
29+
for a != b {
30+
a = a.Next
31+
b = b.Next
32+
}
33+
return a
34+
}

162. Find Peak Element.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package main
2+
3+
//不难,就是要注意首尾的判断
4+
func findPeakElement(nums []int) int {
5+
l := len(nums)
6+
if l == 1 {
7+
return 0
8+
}
9+
if nums[0] > nums[1] { //第一个元素
10+
return 0
11+
} else if nums[l-1] > nums[l-2] { //最后一个元素
12+
return l - 1
13+
} else { //中间的
14+
for i := 1; i < len(nums)-1; i++ {
15+
if nums[i] > nums[i-1] && nums[i] > nums[i+1] {
16+
return i
17+
}
18+
}
19+
}
20+
return -1
21+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package main
2+
3+
//从两端向中间收敛
4+
func twoSum(numbers []int, target int) []int {
5+
l, r := 0, len(numbers)-1
6+
for l < r {
7+
if numbers[l]+numbers[r] < target {
8+
l++
9+
} else if numbers[l]+numbers[r] > target {
10+
r--
11+
} else {
12+
return []int{l + 1, r + 1}
13+
}
14+
}
15+
return nil
16+
}

169. Majority Element.go

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

179. Largest Number.go

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package main
2+
3+
import (
4+
"sort"
5+
"strconv"
6+
)
7+
8+
//用内置排序接口
9+
type intSlice []int
10+
11+
func newIntSlice(a []int) intSlice {
12+
b := intSlice{}
13+
for _, v := range a {
14+
b = append(b, v)
15+
}
16+
return b
17+
}
18+
func (s intSlice) Len() int {
19+
return len(s)
20+
}
21+
22+
func (s intSlice) Less(i, j int) bool {
23+
stri := strconv.Itoa(s[i])
24+
strj := strconv.Itoa(s[j])
25+
s1, _ := strconv.Atoi(stri + strj)
26+
s2, _ := strconv.Atoi(strj + stri)
27+
return s1 > s2
28+
}
29+
30+
func (s intSlice) Swap(i, j int) {
31+
s[i], s[j] = s[j], s[i]
32+
}
33+
34+
func largestNumber(nums []int) string {
35+
s := newIntSlice(nums)
36+
sort.Sort(s)
37+
res := ""
38+
for _, v := range s {
39+
res += strconv.Itoa(v)
40+
if res == "0" {
41+
res = ""
42+
}
43+
}
44+
if res == "" {
45+
return "0"
46+
}
47+
return res
48+
}

189. Rotate Array.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 rotate(nums []int, k int) {
4+
if k == 0 || len(nums) == 0 {
5+
return
6+
}
7+
k = k % len(nums)
8+
if k == 0 {
9+
return
10+
}
11+
tmp := nums
12+
nums = append(nums[len(nums)-k:], nums[0:len(nums)-k]...)
13+
for i := 0; i < len(tmp); i++ {
14+
tmp[i] = nums[i]
15+
}
16+
return
17+
}

203. Remove Linked List Elements.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
//双指针
4+
func removeElements(head *ListNode, val int) *ListNode {
5+
if head == nil {
6+
return head
7+
}
8+
var p1 ListNode
9+
p1.Next = head
10+
p2 := &p1
11+
for head != nil {
12+
if head.Val == val {
13+
p2.Next, head = head.Next, head.Next
14+
} else {
15+
p2, head = head, head.Next
16+
}
17+
}
18+
return p1.Next
19+
}

206. Reverse Linked List.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package main
2+
3+
type ListNode struct {
4+
Val int
5+
Next *ListNode
6+
}
7+
8+
func reverseList(head *ListNode) *ListNode {
9+
var newh ListNode
10+
for head != nil {
11+
newh.Next, head.Next, head = head, newh.Next, head.Next
12+
}
13+
return newh.Next
14+
15+
}

217. Contains Duplicate.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package main
2+
3+
func containsDuplicate(nums []int) bool {
4+
if len(nums) < 2 {
5+
return false
6+
}
7+
m := make(map[int]bool)
8+
for _, v := range nums {
9+
_, ok := m[v]
10+
if ok {
11+
return true
12+
}
13+
m[v] = true
14+
}
15+
return false
16+
}

219. Contains Duplicate II.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package main
2+
3+
//找到的时候判断一下距离
4+
func containsNearbyDuplicate(nums []int, k int) bool {
5+
if len(nums) < 2 {
6+
return false
7+
}
8+
m := make(map[int]int)
9+
for i, v := range nums {
10+
val, ok := m[nums[i]]
11+
if ok {
12+
if val+k >= i {
13+
return true
14+
}
15+
}
16+
m[v] = i
17+
}
18+
return false
19+
}

0 commit comments

Comments
 (0)