leetcode17.04面试题:消失的数字

  数组nums包含从0n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗?

leetcode17.04面试题:消失的数字_第1张图片

思路1:暴力枚举 
定义一个[0~n]的数组与所给数组nums进行循环遍历,如果不相等则返回那个数。

int missingNumber(int* nums, int numsSize){
    int sz=numsSize+1;
    int arr[sz];
    for(int i=0;i

 思路二:求和相减

只需要将原本的数求和,与所给的数组求和,相减就可以得到缺失的那个数

int missingNumber(int* nums, int numsSize){
    int my_total=((0+numsSize)*(numsSize+1))/2;
    int nums_total=0;
    
    for(int i=0;i

 思路三:按位异或

根据按位异或原则,相同为0,不同为1,0与任何数异或为它本身。例如1 1 3 2 4 3 4 从第一个1异或到最后一个数4,相同的就没了,只剩一个数2。那么我们就可以按照这种思路,定义一个初始值为0的变量,先与我的数组进行异或,再与给定数组进行异或,我的数组里如果含有给定数组的里数那么就异或掉,最后异或出一个没有的数。

int missingNumber(int* nums, int numsSize){
    int x=0;
    int i=0;
    for(i=0;i<=numsSize;++i){
        x^=i;
    }
    for(i=0;i


 

你可能感兴趣的:(C语言,数据结构与算法,算法)