/*
给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。
*/
#include<iostream>
#include<vector>
#include<algorithm>
#include<ctime>
#include<map>
using namespace std;
//方法1 排序+一次遍历
void test1(vector<int>v) {
clock_t startTime = clock();
sort(v.begin(), v.end());
if (v[0] != 0)
cout << 0 << endl;
for (int i = 0; i < v.size(); i++) {
if (v[i] != i) {
cout << i << endl;
break;
}
}
clock_t endTime = clock();
cout <<"排序+遍历:"<< (endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
}
//哈希表
void test2(vector<int>v) {
clock_t startTime = clock();
int n = v.size();
map<int, int>m;
for (int i = 0; i < n; i++) {
m[v[i]]++;
}
for (int i = 0; i <= n; i++) {
if (m[i] == 0) {
cout << i << endl;
break;
}
}
clock_t endTime = clock();
cout << "哈希表:" << (endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
}
//位运算
void test3(vector<int>v) {
clock_t startTime = clock();
int mis = v.size();
for (int i = 0; i < v.size(); i++) {
mis ^= i ^ v[i];
}
cout << mis << endl;
clock_t endTime = clock();
cout <<"位运算:"<< (endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
}
//数学
void test4(vector<int>v) {
clock_t startTime = clock();
int n = v.size();
int idealsum = (n * (n + 1)) / 2;
int sum = 0;
for (int i = 0; i < v.size(); i++) {
sum += v[i];
}
cout << idealsum - sum << endl;
clock_t endTime = clock();
cout << "数学:" << (endTime - startTime) / CLOCKS_PER_SEC << "s" << endl;
}
int main() {
int arr[] = { 9,6,4,2,3,5,7,0,1 };
vector<int>nums;
for (int i = 0; i < 9; i++) {
nums.push_back(arr[i]);
}
//排序 遍历
test1(nums);
//哈希表
test2(nums);
//位运算
test3(nums);
//数学
test4(nums);
system("pause");
return 0;
}