classSolution { public: vector<int> findErrorNums(vector<int>& nums){ int len = nums.size(); int model = 0, nsum = 0; for (int i = 0; i < len; ++i) { model ^= nums[i]; nsum += nums[i]; } for (int i = 1; i <= len; ++i) model ^= i; int diffIdx = 1; for (; (model & diffIdx) == 0; diffIdx <<= 1); int a = 0, b = 0; for (int i = 0; i < len; ++i) { if (nums[i] & diffIdx) a ^= nums[i]; else b ^= nums[i]; } for (int i = 1; i <= len; ++i) { if (i & diffIdx) a ^= i; else b ^= i; } int maxa = (a > b ? a : b), mina = (a < b ? a : b); vector<int> ans; if (nsum > len * (len + 1) / 2.0) { ans.push_back(maxa); ans.push_back(mina); } else { ans.push_back(mina); ans.push_back(maxa); } return ans; } };