add new solutions

This commit is contained in:
Yiyang Kang 2026-02-01 14:56:08 +09:00
parent 67cad91898
commit 51975f3386
Signed by: kkyy
SSH key fingerprint: SHA256:lJSbAzC3MvrSORdvIVK6h/3g+rVKJNzM7zq0MgA9WKY
24 changed files with 933 additions and 14 deletions

View 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