题解 | #没有出现的编号#
没有出现的编号
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题目,