2022-5-1 双指针
给定两个大小相等的数组 nums1 和 nums2,nums1 相对于 nums 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描述。
返回 nums1 的任意排列,使其相对于 nums2 的优势最大化。
1 class Solution { 2 public int[] advantageCount(int[] nums1, int[] nums2) { 3 // 11 13 25 32 4 // 8 12 24 32 5 // 8 32 24 6 Arrays.sort(nums1); 7 int n=nums1.length; 8 PriorityQueue<Pair> queue=new PriorityQueue<>((a,b)->(b.num-a.num)); 9 for (int i=0;i<n;i++){ 10 queue.offer(new Pair(nums2[i],i)); 11 } 12 13 int[] ans=new int[n]; 14 int l=0,r=n-1; 15 while (!queue.isEmpty()){ 16 Pair pair=queue.poll(); 17 int i=pair.index,temp=pair.num; 18 if (nums1[r]<=temp) { 19 ans[i]=nums1[l]; 20 l++; 21 }else { 22 ans[i]=nums1[r]; 23 r--; 24 } 25 } 26 return ans; 27 } 28 29 class Pair{ 30 int num; 31 int index; 32 Pair(int num,int index){ 33 this.num=num; 34 this.index=index; 35 } 36 } 37 }
思路:对于一个数字,如果没有比他大的直接用最小的田忌赛马。证明过程略。 为了记住排序后的,需要一个pair数据来排序和原先的索引。
浙公网安备 33010602011771号