<消失的数字>【LeetCode】题目练习

目录

         1.题目:   

面试题 17.04. 消失的数字 

2.思路:

3.解析:

后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                             ——By 作者:新晓·故知


1.题目:   面试题 17.04. 消失的数字 

力扣https://leetcode-cn.com/problems/missing-number-lcci/

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

2.思路:

1.排序

冒泡:O(N*N) 快排:O(N*logN)

2.映射(哈希法)

开辟一个数组(0-N)并初始化为某个值(这里使用-1不会与题目中的数冲突),每个值是多少就作为下标对应的位置写成多少,然后进行遍历,输出是-1的位置的下标即可。

遍历了2遍(2N),时间复杂度:O(N) 空间复杂度:O(N)

3.异或(相同为0,相异为1)

用一个value跟0-N的数字异或,再跟数据中的值异或,最后value就是缺失的数字,O(N)

4.等差数列公式 O(N)

将0-N的数全部相加,再减去数组nums,剩余的数就是消失的数。

3.解析:

解法1:

异或: 
int missingNumber(int* nums, int numsSize)
{
	int x = 0;
	//x先与数组nums异或
	for (int i = 0; i < numsSize; ++i)
	{
		x ^= nums[i];
	}
	//x再与o-N异或
	for (int i = 0; i <= numsSize; ++i)
	//for (int i = 0; i < numsSize+1; ++i)语句等价
	{
		x ^= i;
	}
	return x;
}

 解法2:

求和相减:
int missingNumber(int* nums, int numsSize)
{
    int sum = 0;
    for(int i = 0; i< numsSize+1;i++)
    {
        sum+=i;
    }
    for(int i = 0;i <numsSize;i++)
    {
        sum-=nums[i];
    }
    return sum;
}

后记:
●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教!

                                                                                           ——By 作者:新晓·故知

猜你喜欢

转载自blog.csdn.net/m0_57859086/article/details/125118420
今日推荐