LeetCode推薦

最近在LeetCode上做了一些算法題,大部分是最基礎easy難度的題。做完之後很多算法需要重構纔可以通過所有的cases,在這個過程中我發現有效提高了基礎語言能力,比單純寫項目提高的更快,希望不知道如何提高語言能力的小夥伴可以去上面刷幾道題。

下圖是這一週刷的題,每天上班空隙刷一道,不貪多。

    


     下面介紹其中一道題:

    Single Number

     Given an array of integers, every element appears twice except for one. Find that single one.

     翻譯就是給你一個整形數組,除了某一個元素外,其他元素都會出現兩次,找到那個只出現一次的元素。

     首先想到使用遍歷+計數器的方法,大意是使用兩個for循環遍歷比對數組,如果每次循環結果計數器不等於2而是等於1,那麼就返回那個數字

 
var singleNumber = function(nums) {    
   let count = 0
     for(let i=0;i<=nums.length-1;i++){
       for(let m=0;m<=nums.length-1;m++){
          if(nums[i]===nums[m]){
             count++
        }

     }
     if(count===1){
     return nums[i] 
     }
     count = 0;
  }
}
     這段代碼在桌面編譯器是可以執行得到正確結果的,但是在leetCode上顯示:

     程序運行超時,這就是leetCode比較有意思的地方了,你的代碼時間複雜度和空間複雜度太高是不可以通過的,這就逼迫我一直重構重構。。。

    於是就有了下面這個方案:

var singleNumber = function(nums) {
    //查詢數組之中不重複的那個元素,使用排序法,使用一個循環來遍歷數組
    //排序後的數學特徵是:如果每次步幅爲2的話,當遇到兩個不相等的數字時,那麼第一個數字就是那個不重複的數
    //而且不需要考慮數組角標越界
    nums.sort(compare)
    let i =0;
    while(nums[i]===nums[i+1]){
        i=i+2
    }
    return nums[i]
  };
function compare(a,b){
    return a-b
}
      只是用了1個循環,排序後利用題目的數學特徵去判斷,一對兒一對兒判斷。

      例如:

       [1,1,2,2,3,4,4]

      第一對相等,i=i+2之後判斷 第二對相等 同理判斷第三對不等,那麼答案就是nums[i]

提交後:

         

             提交成功。不過這只是其中一道比較簡單的題,還有大量medium和hard題目前刷起來比較費時,有的則根本沒有思路,但是我相信以後我會全刷完的。

             目前leetCode上面有679道題,還在遞增,內容涉及各類算法,數據結構,數據庫,網絡等,確實是一個練手的寶庫。

          









     


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章