LeetCode(169):多數元素
阿新 • • 發佈:2020-11-02
題目描述
實現思路
根據題目的描述,可以理解為:
在給定的陣列中 找出 出現次數最多的一個元素(假定一定有一個這樣的元素)
那麼我們可以藉助一個雜湊表 來儲存各個元素出現的次數
遍歷完陣列後,再找出雜湊表中的value最大值
程式碼實現(Javascript)
首先遍歷陣列:
1、用map.get(key)方法拿到當前元素出現的次數
2、用map.set(key,value)方法 讓其次數+1
然後用 array.from(map) 方法將雜湊錶轉換成陣列
(陣列中的每個元素都是一個物件)
並根據value值從大到小排序
返回最大的value值所對應的key值
var majorityElement = function(nums) { var myMap=new Map() for(let i=0;i<nums.length;i++){ let v=myMap.get(nums[i]) if(v!==undefined){ v++ myMap.set(nums[i],v) }else{ myMap.set(nums[i],1) } } var arr=Array.from(myMap) arr.sort(function(a,b){ return b[1]-a[1] }) return arr[0][0] };
注意到題目說:多數元素是指在陣列中出現次數大於 n/2 的元素(且唯一)
因此,我們可以在迴圈中,對v再做一層判斷
若v > n/2,則當前元素一定是我們要找的那個元素
/** * @param {number[]} nums * @return {number} */ var majorityElement = function(nums) { var myMap=new Map() for(let i=0;i<nums.length;i++){ let v=myMap.get(nums[i]) if(v!==undefined){ v++ if(v>Math.floor(nums.length/2)){ return nums[i] } myMap.set(nums[i],v) }else{ myMap.set(nums[i],1) } } var arr=Array.from(myMap) arr.sort(function(a,b){ return b[1]-a[1] }) return arr[0][0] };