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

思路1:暴力枚举
定义一个[0~n]的数组与所给数组nums进行循环遍历,如果不相等则返回那个数。
- int missingNumber(int* nums, int numsSize){
- int sz=numsSize+1;
- int arr[sz];
- for(int i=0;i
- arr[i]=i;
- }
- for(int i=0;i
- int count=0;
- for(int j=0;j
- if(arr[i]==nums[j]){
- count++;
- }
- }
- if(count==0){
- return arr[i];
- }
-
- }
- return 0;
- }
思路二:求和相减
只需要将原本的数求和,与所给的数组求和,相减就可以得到缺失的那个数
- int missingNumber(int* nums, int numsSize){
- int my_total=((0+numsSize)*(numsSize+1))/2;
- int nums_total=0;
-
- for(int i=0;i
- nums_total+=nums[i];
- }
- return my_total-nums_total;
- }
思路三:按位异或
根据按位异或原则,相同为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
- x^=nums[i];
- }
- return x;
- }
-
相关阅读:
非关系型数据库(NoSQL数据库
System 对象解析
2023年5月14日蓝桥杯c++省赛中级组
009:实验环境
数据结构之单向链表
security如何不拦截websocket
php电子商务的服装库存管理系统
langchain主要模块(五):Agent以及Wandb
Qt应用开发(基础篇)——按钮基类 QAbstractButton
代码随想录算法训练营第五十四天丨 动态规划part15
-
原文地址:https://blog.csdn.net/qq_43112916/article/details/133847825