数组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;
- }
-
相关阅读:
1024节日快乐
C++ PrimerPlus 复习 第一章 命令编译链接文件 make文件
轻量级简约仪表板Dasherr
查看Linux系统信息的常用命令
STM32的GPIO端口的八种模式解析
大数据面试重点之Kafka(五)
SQL命令及MariaDB(二)
【目标检测】基于深度学习的植物中草药智能识别系统【python源码+Pyqt5界面+数据集+训练代码 MX_001期】
【前端验证】fork-join_none线程立即执行的一次代码优化记录
hivesql连续日期统计最大逾期/未逾期案例
-
原文地址:https://blog.csdn.net/qq_43112916/article/details/133847825