面試題17.04.消失的數字
阿新 • • 發佈:2020-12-07
陣列nums包含從0到n的所有整數,但是其中缺了一個。請編寫程式碼找出那個缺失的整數。要求:時間複雜度O(n)。
//第一次嘗試:
//方法一:思路是再開闢一個numsSize+1的陣列arr,然後遍歷nums,出現的數字在arr下標對應的位置設為-1,然後遍歷arr,沒有出現-1的,就是消失的數字
//方法二:思路是將nums中的數相加得到sum,然後從0加到numsSize,得到sum1,然後sum1-sum=ret,則ret就是消失的數字。
#include<stdio.h> #include<stdlib.h> //時間複雜度:O(n) int missingNumber1(int* nums, intnumsSize) { int* arr = (int*)calloc(numsSize + 1, sizeof(int)); if (arr == NULL) return NULL; for (int i = 0; i < numsSize; i++) { arr[nums[i]] = 1; } for (int i = 0; i < numsSize + 1; i++) { if (arr[i] == 0) return i; } } //時間複雜度:O(n) intmissingNumber2(int* nums, int numsSize) { int sum = 0, sum1 = 0; for (int i = 0; i < numsSize; i++) { sum += nums[i]; sum1 += i; } sum1 += numsSize; return sum1 - sum; } int main() { int arr[] = { 8,6,4,2,3,5,9,0,1 }; printf("%d\n", missingNumber1(arr, sizeof(arr) / sizeof(arr[0]))); printf("%d\n", missingNumber2(arr, sizeof(arr) / sizeof(arr[0]))); return 0; }