if(n & 1 == 1){ // n 是個奇數。 }
x = x ^ y y = x ^ y x = x ^ y
代替html
int tmp = x; x = y; y = tmp;
數字 一、二、二、一、三、三、四、五、4中找出只出現過1次的數java
一道LeetCode題解,從數組中找出出現過1次的數,已知這樣的數有2個。算法
首先先得到者兩個數相異或的結果,再找出最低位對應的數值mask,再經過&操做,將數組中的數分紅兩組,同組數之間再進行異或,得出結果。數組
public static int[] singleNumbers(int[] nums) { // 4 1 4 6 int[] rst = new int[2]; int len = nums.length; if (len == 2) { return nums; } // 獲取出現過1次的兩個數相與後的中間值mid = a1 ^ a2 int mid = 0; for (int num : nums) { mid = mid ^ num; } // 獲取mid中最低位1對應的數值mask int mask = mid & (mid * (-1)); for (int num : nums) { if ((num & mask) == 0) { rst[0] ^= num; } else { rst[1] ^= num; } } return rst; }
//a = a / 2 a<<=1; //a = a * 2 a>>=1;
[1]: <a href="https://mp.weixin.qq.com/s/03gQigIamTgjdxVrLRACNg" target="_blank">【算法技巧】位運算裝逼指南</a> [2]: <a href="https://www.cnblogs.com/jimoer/p/10787672.html" target="_blank">有助於改善性能的Java代碼技巧</a> [3]: <a href="https://fang-cheng.iteye.com/blog/2441007" target="_blank">實用 | 35個能夠提升千倍效率的Java代碼小技巧</a>性能