判斷陣列中重複的element是什麼,並回傳
思考邏輯:先將陣列nums排序好,並宣告一個空陣列box,若該元素並未存在於box中則將其丟入,若存在則將其從box中拿出。由於nums已於一開始排序好了,因此box中最多也只會有一個element,因此最後回傳box[0]則是沒有重複的element!!
def single_number(nums)
nums.sort!
box = []
nums.each_with_index do |num, index|
if index == 0
box << num
next
end
if box[0] == nums[index]
box.pop
else
box << num
end
end
box[0]
end
其實題目還有另外要求不要使用多餘的記憶體空間來操作矩陣,但我寫的太快了,直到用JavaScript寫時才發現。另外題目還有要求runtime必須為O(n),表示不能用兩層迴圈來一個個檢查!綜合上述兩點JavaScript我決定換個方式寫寫看
思考邏輯:我會先將nums頭部element取出並放入變數a中,假如拿出後的nums中還有與a相同的element則將其刪除,若沒有表示它沒有重複,就直接return a。由於題目的input中一定會有一個重複的element,因此while迴圈的條件就算隨便設(會動就好),也不會陷入無窮迴圈。
var singleNumber = function(nums) {
while(true){
let a = nums.shift()
if(nums.indexOf(a) === -1){
return a
}else{
nums.splice(nums.indexOf(a),1)
}
}
};
小結: