iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 3
0
Software Development

挑戰用JavaScript刷LeetCode的Top Interview Questions系列 第 3

刷LeetCode-Top Interview Questions 陣列篇3

  • 分享至 

  • xImage
  •  

主題:Array

Contains Duplicate

判斷陣列中有沒有重複的元素,有的話回傳true,沒有則回傳false

思考邏輯:第一直覺是先將陣列中重複的element拿出來,再與原來矩陣做比較

Ruby:

# 寫法1
def contains_duplicate(nums)
  nums.uniq != nums
end

其實一開始我使用的是uniq!(寫法2),後來發文時發現不對,這怎麼會對呢??,加驚嘆號不是會改變到原來的陣列,這樣結果不就會一直true到底嗎?但其實不是我想像的

# 寫法2
def contains_duplicate(nums)
  nums.uniq! == nums
end

原因是當uniq!前面接的陣列本來就沒有重複的element的話會回傳nil,而nil == nums就會回傳false;若有重複element則會直接改變原來陣列,並回傳變更過的陣列。
所以假設nums為[1, 2, 3, 3, 1],使用寫法2的話,第一次執行時會回傳true([1, 2, 3] == [1, 2, 3]),再執行一次的話因為nums已經被改變了,因此會回傳false(nil == [1, 2, 3]),然後false到底。使用寫法1的話則沒有這個問題,每次的回傳結果皆相同([1, 2, 3] == [1, 2, 3, 3, 1])

JavaScript:

var containsDuplicate = function(nums) {
    for(let i=0; i<nums.length; i++){
        for(let j=i+1; j<nums.length; j++){
            if(nums[i] === nums[j]){
                return true
            }          
        }
    }
    return false
};

JavaScript寫法基本上與Ruby邏輯是一樣的,只是沒有uniq這麼方便的method,因此寫法蠻醜的XDD(包了兩層迴圈)

小結:

  • uniq!不只會改變原來的陣列,若陣列沒有重複element,則回傳nil;uniq則會回傳運算過的陣列,但原始陣列不會改變,詳細請見內文。
  • JavaScript寫法好醜XDD,有什麼更快的方法歡迎大家交流一下 : )

上一篇
刷LeetCode-Top Interview Questions 陣列篇2
下一篇
刷LeetCode-Top Interview Questions 陣列篇4
系列文
挑戰用JavaScript刷LeetCode的Top Interview Questions7
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言