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

没有出现的编号

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

考察知识点:遍历数组

题目分析

寻找不存在的最小正整数:

循环累加数字,通过从1开始累积,寻找哪个正整数没有在数组中出现过的,就将它作为不存在数组中的最小正整数;

寻找数组中最大的负数:

如果数组中没有负数或者没有负数有0的话,那么最大的负数就是0

遍历数组,寻找比0更大的负数,找到的情况下就将该数设为最大负数

详细的解析在代码里有注释

采用的编程语言:C

完整的编码分析:如下所示

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param nums int整型一维数组 
 * @param numsLen int nums数组长度
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
int* findMissingAndMaxNegative(int* nums, int numsLen, int* returnSize ) {
    int *NB72 = NULL;
    int num1 = 1, num2 = 0;
    int flag = 1;

    NB72 = calloc(1, 1000);

  	// 寻找不存在的最小正整数
    while (1) {
        flag = 1;
        for (int i = 0; i < numsLen; i++) {		// 通过从1开始累积,寻找哪个正整数没有在数组中出现过的,就将它作为不存在数组中的最小正整数
            if (nums[i] == num1) {
                flag = 0;		// 在数组中发现了和当前累积的正整数的数值,所有吧flag置0表示不是不存在的最小正整数,并退出循环
                break;
            }
        }

        if (flag)		// 如果退出后,flag一直都是1表示并没有在数组中发现和当前正整数一样的正整数,所有当前整数就是我们寻找的不存在的最小正整数
            break;
        else
            num1++;
    }

  	// 寻找数组中最大的负数
    for (int i = 0; i < numsLen; i++) {
        if (nums[i] < 0) {		//如果数组中没有负数的话,那么num2就是0
            if (num2 == 0)		// 如果num2为0表示第一次发现负数,就把这个负数作为num2的最大负数
                num2 = nums[i];
            else if (num2 < nums[i])		// 这里寻找比num2更大的负数,找到的情况下就更新num2位最大负数
                num2 = nums[i];
        }
    }

    NB72[0] = num1;
    NB72[1] = num2;
    *returnSize = 2;

    return NB72;
}

面试高频TOP202解析 文章被收录于专栏

采用Java,C,Python等方法去解答面试高频TOP202题目,

全部评论

相关推荐

门口唉提是地铁杀:之前b站被一个游戏demo深深的吸引了。看up主页发现是个初创公司,而且还在招人,也是一天60。二面的时候要我做一个登录验证和传输文件两个微服务,做完要我推到github仓库,还要我加上jaeger和一堆运维工具做性能测试并且面试的时候投屏演示。我傻乎乎的做完以后人家跟我说一句现在暂时不招人,1分钱没拿到全是白干
你的秋招第一场笔试是哪家
点赞 评论 收藏
分享
07-17 11:27
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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