判斷陣列中有沒有重複的元素,有的話回傳true,沒有則回傳false
思考邏輯:第一直覺是先將陣列中重複的element拿出來,再與原來矩陣做比較
# 寫法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])
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(包了兩層迴圈)
小結: