1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
| package main
import ( "fmt" "math/rand" "sort" "strconv" )
func main() { var nums1, nums2 []int set := make(map[int]bool) for i := 0; i < 10; i++ { randNum := rand.Intn(100) if _, ok := set[randNum]; !ok { set[randNum] = true nums1 = append(nums1, randNum) }
randNum = rand.Intn(100) if _, ok := set[randNum]; !ok { set[randNum] = true nums2 = append(nums2, randNum) } } nums := append(nums1, nums2...) sort.Ints(nums1) sort.Ints(nums2) sort.Ints(nums) fmt.Println(nums1, nums2) fmt.Println(nums)
fmt.Println("expect:" + strconv.Itoa(nums[8])) fmt.Println("what I get:" + strconv.Itoa(kthLargestNum(nums1, nums2, 9))) }
func kthLargestNum(A, B []int, k int) int { if len(A) > len(B) { return kthLargestNum(B, A, k) } if len(A) == 0 { return B[k-1] } if k == 1 { return min(A[0], B[0]) }
var i, j int if k/2 < len(A) { i = (k / 2) - 1 } else { i = len(A) - 1 } j = k - (i + 1) - 1
fmt.Println(A, B, k, i, j)
if A[i] < B[j] { return kthLargestNum(A[i+1:], B[:j+1], k-i-1) } else { return kthLargestNum(A[:i+1], B[j+1:], k-j-1) } }
func min(a, b int) int { if a > b { return b } return a }
|