⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐
示例 1:
输入:nums = [3,9,2,1,7], k = 3
输出:7
解释:
1 出现在两个大小为 3 的子数组中:[9, 2, 1]、[2, 1, 7]
2 出现在三个大小为 3 的子数组中:[3, 9, 2]、[9, 2, 1]、[2, 1, 7]
3 出现在一个大小为 3 的子数组中:[3, 9, 2]
7 出现在一个大小为 3 的子数组中:[2, 1, 7]
9 出现在两个大小为 3 的子数组中:[3, 9, 2]、[9, 2, 1]
返回 7 ,因为它满足题意的所有整数中最大的那个。
注意:竞赛中,请勿复制题面内容,以免影响您的竞赛成绩真实性。©leetcode
题解:
根据情况模拟即可;
代码:
// 非特殊情况下 结果x应该为两端的数字之一
// 因要保证x恰好仅出现在nums中的一个大小为k的子数组中 而k一般均为[2,len-1]内
// 故只有两端才可保证唯一 此时即两端数字分别验证是否不重复即可 返回不重复的一个 若均不重复返回大的即可
// 特殊情况即k == len || k == 1
// 1. k == len 此时即取数组最大值即可 因此时大小为k的子数组只有一个 故数组中每个数据均满足x的条件
// 2. k == 1 此时即取数组中不重复的数据且尽可能大即可
class Solution {
public int largestInteger(int[] nums, int k) {
if(k == nums.length){
Arrays.sort(nums);
return nums[nums.length-1];
}
int[] hash = new int[51];
for(int i=0;i<nums.length;i++){
hash[nums[i]]++;
}
if(k == 1){
int max = -1;
for(int i=0;i<nums.length;i++){
if(hash[nums[i]] == 1){
max = Math.max(max,nums[i]);
}
else{
continue;
}
}
return max;
}
if(hash[nums[nums.length-1]] > 1 && hash[nums[0]] > 1){
return -1;
}
else if(hash[nums[nums.length-1]] > 1){
return nums[0];
}
else if(hash[nums[0]] > 1){
return nums[nums.length-1];
}
return Math.max(nums[0],nums[nums.length-1]);
}
}