diff --git a/top-100-liked/67/leetcode_test.go b/top-100-liked/67/leetcode_test.go new file mode 100644 index 0000000..4d78ca9 --- /dev/null +++ b/top-100-liked/67/leetcode_test.go @@ -0,0 +1,40 @@ +package top100liked + +import ( + "fmt" + "testing" +) + +// https://leetcode.cn/problems/median-of-two-sorted-arrays/?envType=study-plan-v2&envId=top-100-liked + +func findMedianSortedArrays(nums1 []int, nums2 []int) float64 { + total := len(nums1) + len(nums2) + mid := total / 2 + needAvg := total%2 == 0 + c1, c2 := 0, 0 + prev, cur := 0, 0 + for i := 0; i <= mid; i++ { + prev = cur + if c1 < len(nums1) && (c2 >= len(nums2) || nums1[c1] <= nums2[c2]) { + cur = nums1[c1] + c1++ + } else { + cur = nums2[c2] + c2++ + } + } + if needAvg { + return float64(prev+cur) / 2 + } + return float64(cur) +} + +func Test(t *testing.T) { + // fmt.Println(findMedianSortedArrays([]int{1, 3}, []int{2})) + // fmt.Println(findMedianSortedArrays([]int{1, 2}, []int{3, 4})) + // fmt.Println(findMedianSortedArrays([]int{}, []int{1})) + // fmt.Println(findMedianSortedArrays([]int{}, []int{2, 3})) + // fmt.Println(findMedianSortedArrays([]int{1, 2, 3, 4, 5}, []int{6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17})) + // fmt.Println(findMedianSortedArrays([]int{1, 2}, []int{-1, 3})) + fmt.Println(findMedianSortedArrays([]int{2, 2, 2, 2}, []int{2, 2, 2})) +} diff --git a/top-100-liked/68/leetcode_test.go b/top-100-liked/68/leetcode_test.go new file mode 100644 index 0000000..f9c71dc --- /dev/null +++ b/top-100-liked/68/leetcode_test.go @@ -0,0 +1,43 @@ +package top100liked + +import ( + "fmt" + "testing" +) + +// https://leetcode.cn/problems/valid-parentheses/description/?envType=study-plan-v2&envId=top-100-liked + +func isValid(s string) bool { + stack := []rune{} + for _, c := range s { + if c == '(' || c == '[' || c == '{' { + stack = append(stack, c) + } else { + if len(stack) == 0 { + return false + } + pre := stack[len(stack)-1] + stack = stack[:len(stack)-1] + if c == ')' && pre != '(' { + return false + } + if c == ']' && pre != '[' { + return false + } + if c == '}' && pre != '{' { + return false + } + } + } + return len(stack) == 0 +} + +func Test(t *testing.T) { + fmt.Println(isValid("()")) + fmt.Println(isValid("()[]{}")) + fmt.Println(isValid("(]")) + fmt.Println(isValid("([])")) + fmt.Println(isValid("([)]")) + fmt.Println(isValid("(")) + fmt.Println(isValid("]")) +} diff --git a/top-100-liked/69/leetcode_test.go b/top-100-liked/69/leetcode_test.go new file mode 100644 index 0000000..3227b19 --- /dev/null +++ b/top-100-liked/69/leetcode_test.go @@ -0,0 +1,61 @@ +package top100liked + +import ( + "fmt" + "testing" +) + +// https://leetcode.cn/problems/min-stack/description/?envType=study-plan-v2&envId=top-100-liked + +type MinStack struct { + slice []int + minSlice []int // 记录每个层级的最小值 +} + +func Constructor() MinStack { + return MinStack{} +} + +func (this *MinStack) Push(value int) { + if len(this.slice) == 0 { + this.minSlice = append(this.minSlice, value) + } else { + this.minSlice = append(this.minSlice, min(this.minSlice[len(this.minSlice)-1], value)) + } + this.slice = append(this.slice, value) +} + +func (this *MinStack) Pop() { + this.slice = this.slice[:len(this.slice)-1] + this.minSlice = this.minSlice[:len(this.minSlice)-1] +} + +func (this *MinStack) Top() int { + return this.slice[len(this.slice)-1] +} + +func (this *MinStack) GetMin() int { + return this.minSlice[len(this.minSlice)-1] +} + +func Test1(t *testing.T) { + minStack := Constructor() + minStack.Push(-2) + minStack.Push(0) + minStack.Push(-3) + fmt.Println(minStack.GetMin()) + minStack.Pop() + fmt.Println(minStack.Top()) + fmt.Println(minStack.GetMin()) +} + +func Test2(t *testing.T) { + minStack := Constructor() + minStack.Push(1) + minStack.Push(2) + fmt.Println(minStack.Top()) + fmt.Println(minStack.GetMin()) + minStack.Pop() + fmt.Println(minStack.GetMin()) + fmt.Println(minStack.Top()) +}