http://www.cnblogs.com/hiddenfox/p/3402797.htmlhtml
將排序的二維數組看作一維數組來處理。不重構數據的狀況下,將二分查找的一維座標轉化成二維數組的座標。算法
Single NumberII 出現3次,有一個出現一次,找出一次這個
連接:https://www.nowcoder.com/questionTerminal/1097ca585245418ea2efd0e8b4d9eb7a
Single Number的本質,就是用一個數記錄每一個bit出現的次數,若是一個bit出現兩次就歸0,這種運算採用二進制底下的位操做^是很天然的。Single Number II中,若是能定義三進制底下的某種位操做,也能夠達到相同的效果,Single Number II中想要記錄每一個bit出現的次數,一個數搞不定就加兩個數,用ones來記錄只出現過一次的bits,用twos來記錄只出現過兩次的bits,ones&twos實際上就記錄了出現過三次的bits,這時候咱們來模擬進行出現3次就抵消爲0的操做,抹去ones和twos中都爲1的bits。數組
public
int
singleNumber(
int
[] A) {
spa
int
ones =
0
;
//記錄只出現過1次的bits
.net
int
twos =
0
;
//記錄只出現過2次的bits
code
int
threes;
htm
for
(
int
i =
0
; i < A.length; i++){
blog
int
t = A[i];
排序
twos |= ones&t;
//要在更新ones前面更新twos
three
ones ^= t;
threes = ones&twos;
//ones和twos中都爲1即出現了3次
ones &= ~threes;
//抹去出現了3次的bits
twos &= ~threes;
}
return
ones;
}
http://blog.csdn.net/jiadebin890724/article/details/23306837