部落格網域名稱: http://www.xnerv.wang
原題頁面: https://oj.leetcode.com/problems/single-number-ii/
題目類型:位元運算
難度評價:★★★
本文地址: http://blog.csdn.net/nerv3x3/article/details/39453407
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?
與Single Number相比,前者是每個元素出現兩次(除了一個特殊元素),而本題是每個元素出現三次(除了一個特殊元素)。
int資料共有32位,可以用32變數儲存這N個元素中各個二進位位上1出現的次數,最後在進行模三操作,如果為1,那說明這一位是要找元素二進位表示中為1的那一位。但是這種做法估計不是最好的,應該有更好的演算法,思考中。
class Solution: # @param A, a list of integer # @return an integer def singleNumber(self, A): len_A = len(A) counts = [0] * 32 res = 0 for i in range(0, 32): for num in A: #num = long(num) # it will make time limit exceeded counts[i] += (num>>i) & 1 res |= ((counts[i] % 3) << i) if 0 != counts[31] % 3: res -= pow(2, 32) ###### return res