目录

LeetCode周赛-Q1.-找出最大的几近缺失整数模拟

⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐

⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐

https://i-blog.csdnimg.cn/direct/2f9247c49bc54889815de949bea1cac4.png

示例 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]);
    }
}

结果:

https://i-blog.csdnimg.cn/direct/b4f8fd729342442d83fadcddf10374ea.png