BM52. 数组中只出现一次的两个数字
描述
示例1
输入:
[1,4,1,6]
输出:
[4,6]
说明:
返回的结果中较小的数排在前面示例2
输入:
[1,2,3,3,2,9]
输出:
[1,9]
C++ 解法, 执行用时: 2ms, 内存消耗: 300KB, 提交时间: 2021-09-13
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> FindNumsAppearOnce(vector<int>& array) { // write code here int n = array.size(); map<int, int> mp; vector<int> res; for (int i=0; i<n; i++) mp[array[i]]++; for (int i=0; i<n; i++) { if (mp[array[i]] == 1) res.push_back(array[i]); } sort(res.begin(),res.end()); return res; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2021-09-08
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> FindNumsAppearOnce(vector<int>& array) { // write code here vector<int>res; int n=array.size(); int s=0; for(int i=0;i<n;i++) { s^=array[i]; } int mask=lowbit(s); int a=0,b; for(int i=0;i<n;i++) { if(mask&array[i])a^=array[i]; } b=s^a; res.push_back(a); res.push_back(b); if(res[0]>res[1])swap(res[0],res[1]); return res; } int lowbit(int s) { return s&-s; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2021-09-04
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> FindNumsAppearOnce(vector<int>& array) { // write code here vector<int> vec; if (array.size() == 0) return vec; map<int, int> m; sort(array.begin(),array.end()); int target = 0; for (int i = 0; i < array.size(); ++i) { m[array[i]]++; } for (int i = 0; i < array.size(); ++i) { if (m[array[i]] == 1) vec.push_back(array[i]); } return vec; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 304KB, 提交时间: 2021-07-23
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ // vector<int> FindNumsAppearOnce(vector<int>& array) { // vector<int> ret; // int N = array.size(); // if (N < 1) return ret; // if (N < 2) // { // ret.push_back(array[0]); // return ret; // } // map<int, int> mp; // int i; // for (i = 0; i != N; i++) // { // mp[array[i]]++; // } // for (i = 0; i != N; i++) // { // if (mp[array[i]] == 1) // ret.push_back(array[i]); // } // return ret; // } vector<int> FindNumsAppearOnce(vector<int>& array) { vector<int> ret; int len = array.size(); if(len == 0) return ret; int xorRes = 0; for(int i = 0; i < len; i ++){ xorRes ^= array[i]; } int a = xorRes & (-xorRes + 1); int b = 0; for(int i =0; i < len; i ++){ if((a & array[i]) != 0){ b ^= array[i]; } } a = b ^ xorRes; ret.push_back(a); ret.push_back(b); return ret; } };
C++ 解法, 执行用时: 2ms, 内存消耗: 320KB, 提交时间: 2022-03-13
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param array int整型vector * @return int整型vector */ vector<int> FindNumsAppearOnce(vector<int>& array) { // write code here if(array.empty()) return {}; vector<int> vout; const int sz = array.size(); sort(array.begin(), array.end()); for(int i = 0; i < sz;){ if(i+1 < sz && array[i] == array[i+1]) i+=2; else{ vout.emplace_back(array[i]); ++i; } } return vout; } };