add new solutions
This commit is contained in:
parent
67cad91898
commit
eb6ffe8114
24 changed files with 933 additions and 14 deletions
59
solutions/0/q4/solution.go
Normal file
59
solutions/0/q4/solution.go
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
package q4
|
||||
|
||||
import "math"
|
||||
|
||||
func findMedianSortedArrays(nums1 []int, nums2 []int) float64 {
|
||||
l1, l2 := len(nums1), len(nums2)
|
||||
even := (l1+l2)%2 == 0
|
||||
|
||||
if l1+l2 == 1 {
|
||||
if l1 == 1 {
|
||||
return float64(nums1[0])
|
||||
}
|
||||
return float64(nums2[0])
|
||||
}
|
||||
|
||||
// Find how many numbers `nums1` has that are to the left of the median
|
||||
nLeft := (len(nums1) + len(nums2)) / 2
|
||||
l, r := max(0, nLeft-l2), min(nLeft, len(nums1))+1
|
||||
|
||||
Loop:
|
||||
for l+1 < r {
|
||||
m := (l + r) / 2
|
||||
p1 := m - 1
|
||||
p2 := nLeft - m - 1
|
||||
|
||||
switch {
|
||||
case p2 >= 0 && p1+1 < l1 && nums2[p2] > nums1[p1+1]:
|
||||
l = m + 1
|
||||
case p1 >= 0 && p2+1 < l2 && nums1[p1] > nums2[p2+1]:
|
||||
r = m
|
||||
default:
|
||||
l = m
|
||||
break Loop
|
||||
}
|
||||
}
|
||||
|
||||
lNum, rNum := math.MinInt, math.MaxInt
|
||||
p1 := l - 1
|
||||
p2 := nLeft - l - 1
|
||||
if p1 >= 0 {
|
||||
lNum = max(lNum, nums1[p1])
|
||||
}
|
||||
if p2 >= 0 {
|
||||
lNum = max(lNum, nums2[p2])
|
||||
}
|
||||
if p1+1 < l1 {
|
||||
rNum = min(rNum, nums1[p1+1])
|
||||
}
|
||||
if p2+1 < l2 {
|
||||
rNum = min(rNum, nums2[p2+1])
|
||||
}
|
||||
|
||||
if even {
|
||||
return float64(lNum+rNum) / 2
|
||||
}
|
||||
return float64(rNum)
|
||||
}
|
||||
|
||||
var _ = findMedianSortedArrays
|
||||
29
solutions/0/q84/solution.go
Normal file
29
solutions/0/q84/solution.go
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
package q84
|
||||
|
||||
func largestRectangleArea(heights []int) int {
|
||||
var largest int
|
||||
st := make([][2]int, 0, 256) // x index, height
|
||||
|
||||
for x, h := range heights {
|
||||
minX := x
|
||||
for len(st) > 0 && st[len(st)-1][1] > h {
|
||||
largest = max(largest, st[len(st)-1][1]*(x-st[len(st)-1][0]))
|
||||
minX = min(minX, st[len(st)-1][0])
|
||||
st = st[:len(st)-1]
|
||||
}
|
||||
|
||||
if len(st) > 0 && st[len(st)-1][1] == h {
|
||||
continue
|
||||
}
|
||||
st = append(st, [2]int{minX, h})
|
||||
}
|
||||
|
||||
for i := range st {
|
||||
x, h := st[i][0], st[i][1]
|
||||
largest = max(largest, h*(len(heights)-x))
|
||||
}
|
||||
|
||||
return largest
|
||||
}
|
||||
|
||||
var _ = largestRectangleArea
|
||||
Loading…
Add table
Add a link
Reference in a new issue