Single Number II
Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
C++代码实现:
#include<iostream> #include<map> using namespace std; class Solution { public: int singleNumber(int A[],int n) { multimap<int,int> mp; int i; for(i=0;i<n;i++) { mp.insert({A[i],i}); } auto map_it=mp.begin(); while(map_it!=mp.end()) { auto fst=map_it; auto snd=map_it; fst++; snd++; snd++; if((fst)==mp.end()||snd==mp.end()) return (map_it)->first; if(map_it->first!=(fst)->first||map_it->first!=snd->first) break; map_it++; map_it++; map_it++; } return map_it->first; } }; int main() { Solution s; int arr[]={2,4,2,4,2,4,5,5}; cout<<s.singleNumber(arr,8)<<endl; }
第二遍刷:
int singleNumber(int A[],int n) { multiset<int> st; int i; for(i=0;i<n;i++) st.insert(A[i]); for(i=0;i<n;i++) if(st.count(A[i])!=3) break; return A[i]; }