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

没有出现的编号

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题目,

全部评论

相关推荐

那一天的Java_Java起来:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
Z_eus:别打招呼直接发你的优势
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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