力扣-870.优势洗牌
本文最后更新于:2022年10月9日 下午
题目描述
思路及实现
根据题目我们很容易想到用贪心解决问题。即每次取nums1
中最小的数字跟nums2
中的比较。可以将nums1
按升序排序,用另一个数组reslut
保存结果。
最开始无脑写的:
1 |
|
超时,好的,我就知道(怕不怕我10^5长度的数组)。重新想过后,确实有更好的方法,原理不变,也是贪心,但是对两个数组都进行排序,并“浪费”点空间,创建一些辅助数组。
我们对数组1进行遍历,对nums2
则是利用一下双指针。当nums1
的数大于nums2
的数时,由于我们已经排过序,那么此时肯定满足优势最大化,因为nums1
之后的数都会比当前数大了,所以直接进行配对就行。
如果小于的话,那这个数也小于nums2
之后的数,所以就把这个数丢给nums2
中最大的数,也就是尾指针指向的数。
其实难点在于怎么保持原来的顺序输出,也就是下标问题。由于sort()
函数接受一个key
参数,而这个参数会将接收到的数据用于排序的关键,所以可以利用这点来排序下标数组,以保证最后的输出。
由于我们的数是一一对应的,所以不必担心重复访问,也就是说,我们可以直接对nums2
数组进行修改,并返回它。
1 |
|
希望本文章能够帮到您~
力扣-870.优势洗牌
https://map1e-g.github.io/2022/10/08/leetcode-870/