Skip to content

Commit 1391bed

Browse files
committed
<添加><leetcode><做题记录>
1 parent dad5dad commit 1391bed

File tree

5 files changed

+211
-3
lines changed

5 files changed

+211
-3
lines changed

demo/nsq-demo/main.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ package main
22

33
import (
44
"log"
5-
"time"
6-
"github.com/nsqio/go-nsq"
75
"strconv"
6+
"time"
7+
8+
nsq "github.com/nsqio/go-nsq"
89
)
910

1011
func main() {
@@ -22,7 +23,7 @@ func startProducer() {
2223
// 发布消息
2324
for {
2425
i := time.Now().Unix()
25-
if err := producer.Publish("test", []byte("test message - "+ strconv.FormatInt(i, 10))); err != nil {
26+
if err := producer.Publish("test", []byte("test message - "+strconv.FormatInt(i, 10))); err != nil {
2627
log.Fatal("publish error: " + err.Error())
2728
}
2829
time.Sleep(100 * time.Millisecond)
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
type ListNode struct {
8+
Val int
9+
Next *ListNode
10+
}
11+
12+
// 给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。
13+
//
14+
// 你可以假设除了数字 0 之外,这两个数字都不会以零开头。
15+
//
16+
// 示例:
17+
//
18+
// 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
19+
// 输出:7 -> 0 -> 8
20+
// 原因:342 + 465 = 807
21+
22+
func main() {
23+
// [2,4,3]
24+
// [5,6,4]
25+
oneList := &ListNode{2, &ListNode{4, &ListNode{3, nil}}}
26+
twoList := &ListNode{5, &ListNode{6, &ListNode{4, nil}}}
27+
// oneList := &ListNode{9, &ListNode{8, nil}}
28+
// twoList := &ListNode{1, nil}
29+
30+
resLIst := addTwoNumbers(oneList, twoList)
31+
fmt.Println(resLIst)
32+
}
33+
34+
// good
35+
func addTwoNumbers(l1 *ListNode, l2 *ListNode) *ListNode {
36+
var (
37+
r, t *ListNode
38+
num int
39+
)
40+
for l1 != nil || l2 != nil || num != 0 {
41+
if l1 != nil {
42+
num += l1.Val
43+
l1 = l1.Next
44+
}
45+
if l2 != nil {
46+
num += l2.Val
47+
l2 = l2.Next
48+
}
49+
if num > 9 {
50+
if t == nil {
51+
t = &ListNode{Val: num - 10, Next: nil}
52+
} else {
53+
t.Next = &ListNode{Val: num - 10, Next: nil}
54+
}
55+
num = 1
56+
} else {
57+
if t == nil {
58+
t = &ListNode{Val: num, Next: nil}
59+
} else {
60+
t.Next = &ListNode{Val: num, Next: nil}
61+
}
62+
num = 0
63+
}
64+
if r == nil {
65+
r = t
66+
} else {
67+
t = t.Next
68+
}
69+
}
70+
return r
71+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
// 给定一个字符串,找出不含有重复字符的最长子串的长度。
8+
//
9+
// 示例 1:
10+
//
11+
// 输入: "abcabcbb"
12+
// 输出: 3
13+
// 解释: 无重复字符的最长子串是 "abc",其长度为 3。
14+
// 示例 2:
15+
//
16+
// 输入: "bbbbb"
17+
// 输出: 1
18+
// 解释: 无重复字符的最长子串是 "b",其长度为 1。
19+
// 示例 3:
20+
//
21+
// 输入: "pwwkew"
22+
// 输出: 3
23+
// 解释: 无重复字符的最长子串是 "wke",其长度为 3。
24+
// 请注意,答案必须是一个子串,"pwke" 是一个子序列 而不是子串。
25+
26+
// good
27+
func lengthOfLongestSubstring(s string) int {
28+
// location[s[i]] == j 表示:
29+
// s中第i个字符串,上次出现在s的j位置,所以,在s[j+1:i]中没有s[i]
30+
// location[s[i]] == -1 表示: s[i] 在s中第一次出现
31+
location := [256]int{} // 只有256长是因为,假定输入的字符串只有ASCII字符
32+
for i := range location {
33+
location[i] = -1 // 先设置所有的字符都没有见过
34+
}
35+
36+
maxLen, left := 0, 0
37+
38+
for i := 0; i < len(s); i++ {
39+
// 说明s[i]已经在s[left:i+1]中重复了
40+
// 并且s[i]上次出现的位置在location[s[i]]
41+
if location[s[i]] >= left {
42+
left = location[s[i]] + 1 // 在s[left:i+1]中去除s[i]字符及其之前的部分
43+
} else if i+1-left > maxLen {
44+
// fmt.Println(s[left : i+1])
45+
maxLen = i + 1 - left
46+
}
47+
location[s[i]] = i
48+
}
49+
return maxLen
50+
}
51+
52+
func main() {
53+
i := lengthOfLongestSubstring("pwwkew")
54+
fmt.Println(i)
55+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package main
2+
3+
4+
// 给定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。
5+
//
6+
// 请找出这两个有序数组的中位数。要求算法的时间复杂度为 O(log (m+n)) 。
7+
//
8+
// 你可以假设 nums1 和 nums2 不同时为空。
9+
//
10+
// 示例 1:
11+
//
12+
// nums1 = [1, 3]
13+
// nums2 = [2]
14+
//
15+
// 中位数是 2.0
16+
// 示例 2:
17+
//
18+
// nums1 = [1, 2]
19+
// nums2 = [3, 4]
20+
//
21+
// 中位数是 (2 + 3)/2 = 2.5
22+
23+
func main() {
24+
25+
}
26+
27+
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
28+
29+
}

leetcode/two-sum/two-sum.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package main
2+
3+
import "fmt"
4+
5+
// good
6+
// func twoSum(nums []int, target int) []int {
7+
// memo := map[int]int{}
8+
// for i, v := range nums {
9+
// m, exists := memo[v]
10+
// if exists {
11+
// return []int{m, i}
12+
// } else {
13+
// memo[target-v] = i
14+
// }
15+
// }
16+
// return []int{-1, -1}
17+
// }
18+
19+
//
20+
func twoSum(nums []int, target int) []int {
21+
size := len(nums)
22+
for i1, one := range nums {
23+
i2 := i1 + 1
24+
for size > i2 {
25+
two := nums[i2]
26+
if (one + two) == target {
27+
return []int{i1, i2}
28+
}
29+
i2++
30+
}
31+
}
32+
return []int{}
33+
}
34+
35+
// 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
36+
//
37+
// 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
38+
//
39+
// 示例:
40+
//
41+
// 给定 nums = [2, 7, 11, 15], target = 9
42+
//
43+
// 因为 nums[0] + nums[1] = 2 + 7 = 9
44+
// 所以返回 [0, 1]
45+
func main() {
46+
// 执行用时: 48 ms, 在Two Sum的Go提交中击败了49.23% 的用户
47+
// nums = [2, 7, 11, 15], target = 9
48+
nums := []int{3, 2, 4}
49+
target := 6
50+
sum := twoSum(nums, target)
51+
fmt.Println(sum)
52+
}

0 commit comments

Comments
 (0)