题目的链接在这里:https://leetcode-cn.com/problems/advantage-shuffle/
题目大意
给定两个大小相等的数组 A 和 B,A 相对于 B 的优势可以用满足 A[i] > B[i] 的索引 i 的数目来描述。返回 A 的任意排列,使其相对于 B 的优势最大化。
一、示意图
二、解题思路
for循环系列
for循环系列
代码如下:
class Solution {
public int[] advantageCount(int[] nums1, int[] nums2) {
//这道题的关键还是选取什么数据结构
//那就试试看 找最近且最大的数
//先把A进行排序
//进行一些边界判断
if(nums1.length==0)
return null;
if(nums1.length==1&&nums1[0]>nums2[0]){
return nums1;
}
Arrays.sort(nums1);
int result[]=new int[nums1.length];
//然后就是如果把这个值修改过了 就被这个值设置为一个不会被改正的值
//这里就直接做两次for循环
//count用来判断有没有全部赋值
int count=0;
for(int i=0;i<nums1.length;i++)
for(int j=0;j<nums2.length;j++){
//这里就进行判断并且判断成功的话 就需要赋初值
if(nums1[i]>nums2[j]&&nums1[i]!=Integer.MAX_VALUE&&nums2[j]!=Integer.MAX_VALUE){
//说明这个是最近并且可以放发
result[j]=nums1[i];
//再进行更新
count++;
nums1[i]=Integer.MAX_VALUE;
//好像nums2也不需要改变了
nums2[j]=Integer.MAX_VALUE;
break;
}
}
//这里就是可能会出现没有全都赋值的情况
if(count!=nums1.length){
//那就进行随意赋值?
//比如比较了两次 刚好count是第三个
for(int i=0;i<nums1.length;i++){
if(result[i]==0) {
//只有他等于0说明需要存在补足 才需要进行判断
for (int j = 0; j < nums1.length; j++) {
if (nums1[j] != Integer.MAX_VALUE) {
//这里就要进行修改了
result[i]=nums1[j];
nums1[j]=Integer.MAX_VALUE;
break;
}
}
}
}
}
return result;
}
}