给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。
返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。
难度:🌟🌟🌟🌟
示例 1:
输入:nums1 = [2,7,11,15], nums2 = [1,10,4,11]
输出:[2,11,7,15]
示例 2:
输入:nums1 = [12,24,8,32], nums2 = [13,25,32,11]
输出:[24,32,8,12]
提示:
这道题就像是田忌赛马,nums1 就是田忌的马,nums2 就是齐王的马,数组中的元素就是马的战斗力。
非常典型的贪心算法,每次在 nums1 中寻找大于 nums2[i] 的最小值,若没有,则返回 nums1 中的最小值。
func advantageCount(nums1 []int, nums2 []int) []int {
sort.Ints(nums1)
var res []int
for j := 0; j < len(nums2); j++ {
n := len(nums1)
flag := false // 标识是否在 nums1 中找到比 nums2 中元素大的数
for i := 0; i < n; i++ {
if nums1[i] > nums2[j] { // nums1 中的数比 nums2 中当前数大时
res = append(res, nums1[i])
// 删除 nums1[i]
nums1 = append(nums1[:i], nums1[i+1:]...)
flag = true
break
}
}
if !flag {
m, idx := min(nums1)
nums1 = append(nums1[:idx], nums1[idx+1:]...)
res = append(res, m)
}
}
return res
}
func min(nums []int) (int, int) {
m := nums[0]
idx := 0
for i, num := range nums {
if num < m {
m = num
idx = i
}
}
return m, idx
}