LC-出現一次的數字II

vector6_發表於2020-10-26

出現一次的數字II

//SingleNumberII
/*現在有一個整數型別的陣列,陣列中只有一個元素只出現一次,其餘元素都出現三次。你需要找出只出現一次的元素 
注意: 
你需要給出一個線性時間複雜度的演算法,你能在不使用額外記憶體空間的情況下解決這個問題麼? */
class Solution {
public:
	/**
	*
	* @param A int整型一維陣列
	* @param n int A陣列長度
	* @return int整型
	*/
	//int型別共32位,將陣列中n個數二進位制各位1累加後%3,若為出現三次的數,該位為0,若為1則
	//說明是僅出現一次的數的二進位制位。
	int singleNumber(int* A, int n) {
		int res = 0;
		for (int i = 0; i < 32; ++i)
		{
			int bit = 0; 
			for (int j = 0; j < n; ++j)
			{
				bit += (A[j] >> i) & 1;  //右移i位與0000001求餘得到最後一位(迴圈中當前第i位)
			}                            //的數值
			res |= (bit % 3) << i;       //求餘判斷該為是否為重複數值,左移恢復原位置,
		}                                //或運算組合
		return res;
	}
};

相關文章