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

没有出现的编号

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

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param nums int整型一维数组
     * @return int整型一维数组
     */
    public int[] findMissingAndMaxNegative (int[] nums) {
        // write code here
        Arrays.sort(nums);
        int[] ans = new int[2];
        ans[1] = Integer.MIN_VALUE;
        boolean flag1 = false;
        boolean flag2 = false;

        for (int i = 0; i < nums.length; ++i) {
            if (nums[i] < 0) {
                ans[1] = Math.max(ans[1], nums[i]);
                flag1 = true;
            } else {
                if (i > 0 && nums[i - 1] > 0 && nums[i] != nums[i - 1] + 1 &&
                        nums[i] != nums[i - 1]) {
                    ans[0] = nums[i - 1] + 1;
                    flag2 = true;
                    break;
                } else if (((i > 0 && nums[i - 1] < 0) || i == 0) && nums[i] != 0 &&
                           nums[i] != 1) {
                    ans[0] = 1;
                    flag2 = true;
                    break;
                }
            }
        }

        if (!flag1) {
            ans[1] = 0;
        }

        if (!flag2) {
            ans[0] = nums[nums.length - 1] >= 0 ? nums[nums.length - 1] + 1 : 1;
        }

        return ans;
    }
}

使用Java语言编写的。

这道题考察的是对给定数组进行排序和查找操作。

代码中的解题思路是先对数组进行排序,然后初始化一个长度为2的新数组ans,ans[0]存储缺失的正整数,ans[1]存储负数中的最大值。然后使用两个标志变量flag1和flag2来记录是否找到了缺失的正整数和最大的负数。

遍历排序后的数组nums,如果当前元素小于0,表示为负数,将其与ans[1]比较并更新ans[1]的值为较大的那个数。如果当前元素大于等于0,表示为正数或零,判断相邻元素之间是否存在缺失的正整数。根据题目给出的条件,如果存在缺失的正整数,则更新ans[0]的值为缺失的正整数,并将flag2置为true,跳出循环。

根据flag1和flag2的值判断是否需要进行默认的赋值操作。如果flag1为false,说明数组中没有负数,将ans[1]的值设置为0。如果flag2为false,说明数组中没有缺失的正整数,将ans[0]的值设置为数组最后一个元素加1(若数组最后一个元素为负数,则设置为1)。

最终返回ans数组作为结果。

全部评论

相关推荐

ResourceUtilization:四六级不愧是大学最有用的证之一
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务