数组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;
- }
-
相关阅读:
大数据:SAS数据分析1,数据步,和过程步
mac安装nvm
MFC下拉框控件用法
Git Flow 工作流学习要点
【Rust指南】基础语法|基本数据类型|复合数据类型
【C++项目】高并发内存池第七讲性能分析
Stable Diffusion AI绘图使用记录
林沛满-TCP 是如何避免被发送方分片的?
C语言每日一题(13) 单身狗1,2
硅芯思见:“软约束”到底有多“软”
-
原文地址:https://blog.csdn.net/qq_43112916/article/details/133847825