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