#include <algorithm> #include <iostream> #include <vector> #include <ctime> using namespace std; void shuffle(vector<int> & v) { int const N = v.size(); for(int i = 0; i < N; ++i){ v[i] = i + 1; } random_shuffle(v.begin(), v.end()); cout << "target: " << v[N-2] << ' ' << v[N-1] << endl; v[N-2] = 0; // 乱序后,把最后两个标为删除 v[N-1] = 0; } void find_missing(vector<int> & v) { cout << "result: "; sort(v.begin(), v.end()); // 排序算不上考点,但却影响的时间复杂度。当然10万的数用O(n*Log(n))都能对付 for(int i = 2, N = v.size(); i < N; ++i){ // v[0], v[1] is 0, so start from v[2] if(v[i] - v[i-1] > 1 ){ // 找不连续的 cout << v[i] - 1 << ' '; } } } int main() { srand(time(0)); vector<int> v(100000); shuffle(v); find_missing(v); }