给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 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]
提示:
1 <= nums1.length <= 10^5
nums2.length == nums1.length
0 <= nums1[i], nums2[i] <= 10^9
我的解法:
/**
* @param {number[]} nums1
* @param {number[]} nums2
* @return {number[]}
*/
var advantageCount = function (nums1, nums2) {
/* 按值删除元素 */
function delArr(targetArr, e) {
for (let i = 0; i < targetArr.length; i++) {
if (targetArr[i] === e) {
targetArr.splice(i, 1)
break
}
}
return targetArr
}
/* 寻找最小元素 */
function fundMin(arr) {
var min = arr[0]
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= min) {
min = arr[i]
}
}
return min
}
var temp = []
var answerArr = []
for (let i = 0; i < nums2.length; i++) {
for (let j = 0; j < nums1.length; j++) {
if (nums1[j] > nums2[i]) {
temp.push(nums1[j])
}
}
if (temp.length != 0) {
answerArr.push(fundMin(temp))
nums1 = delArr(nums1, fundMin(temp))
} else {
answerArr.push(fundMin(nums1))
nums1 = delArr(nums1, fundMin(nums1))
}
temp = []
}
return answerArr
};
这个解法是正确的,但由于用到了好几个循环,加上js本身性能的不足,导致时间超出限制
我看了一下,最后一个用例数组有十万个元素,牛