本文主要是介绍Golang | Leetcode Golang题解之第373题查找和最小的K对数字,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目:
题解:
func kSmallestPairs(nums1, nums2 []int, k int) (ans [][]int) {m, n := len(nums1), len(nums2)// 二分查找第 k 小的数对和left, right := nums1[0]+nums2[0], nums1[m-1]+nums2[n-1]+1pairSum := left + sort.Search(right-left, func(sum int) bool {sum += leftcnt := 0i, j := 0, n-1for i < m && j >= 0 {if nums1[i]+nums2[j] > sum {j--} else {cnt += j + 1i++}}return cnt >= k})// 找数对和小于 pairSum 的数对i := n - 1for _, num1 := range nums1 {for i >= 0 && num1+nums2[i] >= pairSum {i--}for _, num2 := range nums2[:i+1] {ans = append(ans, []int{num1, num2})if len(ans) == k {return}}}// 找数对和等于 pairSum 的数对i = n - 1for _, num1 := range nums1 {for i >= 0 && num1+nums2[i] > pairSum {i--}for j := i; j >= 0 && num1+nums2[j] == pairSum; j-- {ans = append(ans, []int{num1, nums2[j]})if len(ans) == k {return}}}return
}
这篇关于Golang | Leetcode Golang题解之第373题查找和最小的K对数字的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!