2022-5-1 双指针

给定两个大小相等的数组 nums1 和 nums2nums1 相对于 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数据来排序和原先的索引。

posted on 2022-05-01 18:05  阿ming  阅读(34)  评论(0)    收藏  举报

导航