| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | func maxNumber(nums1 []int, nums2 []int, k int) []int {	m, n := len(nums1), len(nums2)	max := make([]int, m+n)	for i := maxInt(0, k-n); i <= minInt(k, m); i++ {		num := merge(pick(nums1, i), pick(nums2, k-i))		if less(max, num) {			max = num		}	}	return max}func less(nums1, nums2 []int) bool {	for i := range nums1 {		if nums1[i] < nums2[i] {			return true		} else if nums2[i] < nums1[i] {			return false		}	}	return false}func pick(nums []int, k int) []int {	n := len(nums)	st := make([]int, 0)loop:	for i := 0; i < n; i++ {		for {			if l := len(st); l+n-i == k {				st = append(st, nums[i:]...)				break loop			} else if 0 < l && st[l-1] < nums[i] {				st = st[:l-1]			} else {				st = append(st, nums[i])				break			}		}	}	return st[:k]}func merge(nums1, nums2 []int) []int {	m, n := len(nums1), len(nums2)	res := make([]int, m+n)	i, i1, i2 := 0, 0, 0	for mv1 := false; i1 < m && i2 < n; i++ {		if nums1[i1] < nums2[i2] {			mv1 = false		} else if nums2[i2] < nums1[i1] {			mv1 = true		} else {			for j1, j2, n1, n2 := i1+1, i2+1, 0, 0; (j1 < m || j2 < n) && n1 == n2; j1, j2 = j1+1, j2+1 {				if m <= j1 {					n1 = 0				} else {					n1 = nums1[j1]				}				if n <= j2 {					n2 = 0				} else {					n2 = nums2[j2]				}				if n1 < n2 {					mv1 = false				} else if n2 < n1 {					mv1 = true				}			}		}		if mv1 {			res[i] = nums1[i1]			i1++		} else {			res[i] = nums2[i2]			i2++		}	}	if i1 != m {		copy(res[i:], nums1[i1:])	}	if i2 != n {		copy(res[i:], nums2[i2:])	}	return res}func maxInt(x, y int) int {	if x < y {		return y	}	return x}func minInt(x, y int) int {	if x < y {		return x	}	return y}
 |