Skip to content

Commit 3ce1ae0

Browse files
authored
Merge pull request #197 from lightfish-zhang/master
add Solution for problem 34, 153, 241, wtih golang
2 parents f1739ee + 125a571 commit 3ce1ae0

File tree

3 files changed

+107
-0
lines changed
  • solution
    • 0034.Find First and Last Position of Element in Sorted Array
    • 0153.Find Minimum in Rotated Sorted Array
    • 0241.Different Ways to Add Parentheses

3 files changed

+107
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @lc app=leetcode.cn id=34 lang=golang
3+
* Accepted
4+
* 88/88 cases passed (12 ms)
5+
* Your runtime beats 90.75 % of golang submissions
6+
* Your memory usage beats 60.76 % of golang submissions (4.1 MB)
7+
*/
8+
func searchRange(nums []int, target int) []int {
9+
l, m, r := 0, 0, len(nums)-1
10+
for l <= r {
11+
m = (l + r) / 2
12+
if nums[m] == target {
13+
return []int{findFirst(nums, l, m, target), findEnd(nums, m, r, target)}
14+
}
15+
if nums[m] < target {
16+
l = m + 1
17+
} else if nums[m] > target {
18+
r = m - 1
19+
}
20+
}
21+
return []int{-1, -1}
22+
}
23+
24+
func findFirst(nums []int, l, r, target int) int {
25+
var m int
26+
for l < r {
27+
m = (l + r) / 2
28+
if nums[m] < target {
29+
l = m + 1
30+
} else if nums[m] == target {
31+
r = m
32+
}
33+
}
34+
return l
35+
}
36+
func findEnd(nums []int, l, r, target int) int {
37+
var m int
38+
for l < r {
39+
m = (l + r + 1) / 2 // 需要加一,否则陷入死循环
40+
if nums[m] > target {
41+
r = m - 1
42+
} else if nums[m] == target {
43+
l = m
44+
}
45+
}
46+
return l
47+
}
48+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @lc app=leetcode.cn id=153 lang=golang
3+
* Accepted
4+
* 146/146 cases passed (4 ms)
5+
* Your runtime beats 93 % of golang submissions
6+
* Your memory usage beats 40.91 % of golang submissions (2.6 MB)
7+
*/
8+
func findMin(nums []int) int {
9+
l, m, r := 0, 0, len(nums)-1
10+
for l < r {
11+
if nums[l] <= nums[r] {
12+
return nums[l]
13+
}
14+
m = (r + l) / 2
15+
if nums[l] <= nums[m] {
16+
l = m + 1
17+
} else {
18+
r = m
19+
}
20+
21+
}
22+
return nums[l]
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
/**
2+
* @lc app=leetcode.cn id=241 lang=golang
3+
* Accepted
4+
* 25/25 cases passed (4 ms)
5+
* Your runtime beats 52.94 % of golang submissions
6+
* Your memory usage beats 100 % of golang submissions (6.5 MB)
7+
* time complex O(n^2)
8+
*/
9+
10+
import "strconv"
11+
12+
func diffWaysToCompute(input string) []int {
13+
ret := []int{}
14+
for i, c := range input {
15+
if c == '+' || c == '-' || c == '*' {
16+
left_ret := diffWaysToCompute(input[0:i])
17+
right_ret := diffWaysToCompute(input[i+1:])
18+
for _, l_ret := range left_ret {
19+
for _, r_ret := range right_ret {
20+
if c == '+' {
21+
ret = append(ret, l_ret+r_ret)
22+
} else if c == '-' {
23+
ret = append(ret, l_ret-r_ret)
24+
} else {
25+
ret = append(ret, l_ret*r_ret)
26+
}
27+
}
28+
}
29+
}
30+
}
31+
if len(ret) == 0 {
32+
num, _ := strconv.Atoi(input)
33+
ret = append(ret, num)
34+
}
35+
return ret
36+
}

0 commit comments

Comments
 (0)