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?
no extra memory solution:
class Solution { public: int singleNumber(int A[], int n) { // Note: The Solution object is instantiated only once and is reused by each test case. int single_number = 0; for (int i = 0; i < 32; ++i) {// assume dealing with int32. int bit = 0; for (int j = 0; j < n; ++j) { bit = (bit + ((A[j] >> i) & 1)) % 3; } single_number += (bit << i); } return single_number; } };
another solution:
public int singleNumber(int[] A) { int[] bv = new int[32]; for (int i = 0; i < A.length; i++) { for (int j = 0; j < 32; j++) { bv[j] += (A[i] & (1 << j)) == 0 ? 0 : 1; } } int res = 0; for (int i = 0; i < 32; i++) { if (bv[i] % 3 != 0) { res |= 1 << i; } } return res; }