最近这道题见到好几次了,就记录一下吧
思路
先按位或,将数组中每个对应的位置标1。之后按位与,查找那个没被标为1的位置,就是缺失的数字了。时间复杂度O(n)。
实现代码
#include<iostream>
#include<vector>
using namespace std;
void find_loser(vector<int>&input){
int res=0;
for(auto i:input){
res |=(1<<i);
}
for(int i=1; i<=input.size();i++){
if((res & (1<<i))==0){
cout<<i<<endl;
return;
}
}
}
int main(){
vector<int>input={1,2,3,4,6,7,8,9,10};
find_loser(input);
return 0;
}