Skip to content

add Solution for problem 34, 153, 241, wtih golang #197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/**
* @lc app=leetcode.cn id=34 lang=golang
* Accepted
* 88/88 cases passed (12 ms)
* Your runtime beats 90.75 % of golang submissions
* Your memory usage beats 60.76 % of golang submissions (4.1 MB)
*/
func searchRange(nums []int, target int) []int {
l, m, r := 0, 0, len(nums)-1
for l <= r {
m = (l + r) / 2
if nums[m] == target {
return []int{findFirst(nums, l, m, target), findEnd(nums, m, r, target)}
}
if nums[m] < target {
l = m + 1
} else if nums[m] > target {
r = m - 1
}
}
return []int{-1, -1}
}

func findFirst(nums []int, l, r, target int) int {
var m int
for l < r {
m = (l + r) / 2
if nums[m] < target {
l = m + 1
} else if nums[m] == target {
r = m
}
}
return l
}
func findEnd(nums []int, l, r, target int) int {
var m int
for l < r {
m = (l + r + 1) / 2 // 需要加一,否则陷入死循环
if nums[m] > target {
r = m - 1
} else if nums[m] == target {
l = m
}
}
return l
}

23 changes: 23 additions & 0 deletions solution/0153.Find Minimum in Rotated Sorted Array/Solution.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* @lc app=leetcode.cn id=153 lang=golang
* Accepted
* 146/146 cases passed (4 ms)
* Your runtime beats 93 % of golang submissions
* Your memory usage beats 40.91 % of golang submissions (2.6 MB)
*/
func findMin(nums []int) int {
l, m, r := 0, 0, len(nums)-1
for l < r {
if nums[l] <= nums[r] {
return nums[l]
}
m = (r + l) / 2
if nums[l] <= nums[m] {
l = m + 1
} else {
r = m
}

}
return nums[l]
}
36 changes: 36 additions & 0 deletions solution/0241.Different Ways to Add Parentheses/Solution.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
/**
* @lc app=leetcode.cn id=241 lang=golang
* Accepted
* 25/25 cases passed (4 ms)
* Your runtime beats 52.94 % of golang submissions
* Your memory usage beats 100 % of golang submissions (6.5 MB)
* time complex O(n^2)
*/

import "strconv"

func diffWaysToCompute(input string) []int {
ret := []int{}
for i, c := range input {
if c == '+' || c == '-' || c == '*' {
left_ret := diffWaysToCompute(input[0:i])
right_ret := diffWaysToCompute(input[i+1:])
for _, l_ret := range left_ret {
for _, r_ret := range right_ret {
if c == '+' {
ret = append(ret, l_ret+r_ret)
} else if c == '-' {
ret = append(ret, l_ret-r_ret)
} else {
ret = append(ret, l_ret*r_ret)
}
}
}
}
}
if len(ret) == 0 {
num, _ := strconv.Atoi(input)
ret = append(ret, num)
}
return ret
}