题解 | #没有出现的编号#

没有出现的编号

https://www.nowcoder.com/practice/875d705df65c401a905f574070e09320

题目考察的知识点

考察数组的模拟以及对于题意的理解

题目解答方法的文字分析

题目说的其实不是很清楚,这里说的未出现的最小的正整数,需要从1开始判断寻找,所以设置了一个flag变量,初始化为1。数组升序排列后开始遍历,对于其中的元素,如果是负数,就记录最大的负数值。如果是正数,就与tag开始比较,每次比较完tag+1,直到不相等的时候,这个时候tag所代表的就是没有出现的最小的正整数了。注意需要小心没有负数的情况,用标记位tag做记录。具体细节见代码注释。

本题解析所用的编程语言

使用Java解答

完整且正确的编程代码

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型一维数组
     */
    public int[] findMissingAndMaxNegative (int[] nums) {
        // write code here
        boolean tag = true; //标记是否中间有没出现的整数
        Arrays.sort(nums); //先升序排序
        int point = 0, searchNumber = Integer.MAX_VALUE; //寻找的未出现的整数
        int minNumber = Integer.MIN_VALUE, flag = 1; //flag作为最小整数的对比标记
        while (point<nums.length) {
            int currentNum = nums[point];
            if (currentNum < 0) { //记录最大负数
                tag = false;
                minNumber = Math.max(minNumber, currentNum);
            }else if(currentNum>0){ //正整数
                if(currentNum==flag){
                    flag++;
                }else{
                    break;
                }
            }
            point++;
        }
        if(tag) minNumber = 0; //没有负数
        searchNumber = flag;
        return new int[] {searchNumber, minNumber};
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
05-25 18:29
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务