1. 程式人生 > >【LeetCode刷題記】鵝廠秋招題集(1)

【LeetCode刷題記】鵝廠秋招題集(1)

這算是開部落格以來的第一篇正式的文章了,獻給Leetcode和鵝廠…
自從上了研究生,一天比一天忙,苦逼啊…所以開這個系列的坑一方面提醒自己忙實驗室的專案的同時也要多做做演算法題,督促一下自己;另一方面也希望和各位多多交流,隨便就當刷題總結了_(:з」∠)_

231. 2的冪(Power of Two)

  • 題目:給定一個整數,編寫一個函式來判斷它是否是 2 的冪次方。、
  • 解題思路:
    (1)2次冪的問題一般會往左移運算<(相當於對無符號數x2)與右移運算>(相當於對無符號數÷2)。例如矩陣快速冪演算法有很好的體現
    (2)題目中有個小坑就是整數是包含負數的,而2的冪最小為1
class Solution {
   public boolean isPowerOfTwo(int n) {
       if(n<=0) return false;
       while((n>>1)>0){
           if((n&1)==1){
               return false;
           }
           n=n>>1;
       } 
       return true;
   }
}

136. 只出現一次的數字(Single Number)

  • 題目:給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
  • 解題思路:(這個題以前見過,直接給方案)
    對於異或運算^(按位取亦或操作)有如下性質
    A0=AA\oplus 0=A
    AA=0A\oplus A=0
    由此可得
    ABA=BA\oplus B \oplus A=B
class Solution {
    public int singleNumber(int[] nums) {
        int ans=0;
        int len=nums.length;
        for(int i=0;i<len;i++){
            ans^=nums[i];
        }
        return ans;
    }
}

當然繼續推下去,還有一些比較好玩的結果,例如:
A1=AAA \oplus 1= \sim A(對A按位取反)