forked from qscool1987/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
lc_870.java
30 lines (29 loc) · 1008 Bytes
/
lc_870.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
//
// main.java
// javacode
//
// Created by Ruinenstadt9029 on 2022/10/8.
//
/*
链接:https://leetcode.cn/problems/advantage-shuffle/submissions/
思路:如果两个数组都是升序那么就简单了。
技巧:对nums2的下标按nums2的值进行升序排序,这样可以保证nums2中数字位置不变,得到一个nums2按升序排序的下标。
时间复杂度:稳定在 2nlogn+n
*/
import java.util.Arrays;
import java.util.Comparator;
public class AdvantageCount {
public int[] advantageCount(int[] nums1, int[] nums2) {
int n = nums1.length;
Arrays.sort(nums1);
Integer[] idx = new Integer[n]; //记录nums2的下标
for(int i = 0;i<n;i++) idx[i] = i;
Arrays.sort(idx, Comparator.comparingInt(i -> nums2[i]));//按照nums2升序对下标进行排序
int l = 0,r = n-1;
for(int x:nums1){
if(x>nums2[idx[l]]) nums2[idx[l++]] = x;
else nums2[idx[r--]] = x;
}
return nums2;
}
}