數(shù)組中占比超過一半的元素稱之為主要元素阳掐。給定一個整數(shù)數(shù)組鹏往,找到它的主要元素。若沒有覆旱,返回-1蘸朋。
示例 1:
輸入:[1,2,5,9,5,9,5,5,5]
輸出:5
示例 2:
輸入:[3,2]
輸出:-1
示例 3:
輸入:[2,2,1,1,1,2,2]
輸出:2
說明:
- 你有辦法在時間復(fù)雜度為 O(N),空間復(fù)雜度為 O(1) 內(nèi)完成嗎扣唱?
我的算法實現(xiàn):
/**
* @param {number[]} nums
* @return {number}
*/
var majorityElement = function (nums) {
// 數(shù)組的長度
const len = nums.length
// 保存主要元素的界限
const limitCount = Math.floor(len / 2)
// 將元素的值轉(zhuǎn)換成 map 藕坯,其中 key 為對應(yīng)的值, value 為出現(xiàn)個數(shù)
const numsObj = {}
for (let i = 0; i < len; i++) {
const num = nums[i]
numsObj[num] = (numsObj[num] || 0) + 1
// 如果增加達(dá)到了界限噪沙,那么就直接返回這個值
if (numsObj[num] > limitCount) {
return num
}
}
return -1
};
這個算法主要是使用了 map 的方式炼彪,思路也比較清晰,就是記錄相同元素的個數(shù)正歼,并實時查看當(dāng)前元素出現(xiàn)的個數(shù)辐马,如果發(fā)現(xiàn)有超過的,就直接返回朋腋,這樣不要想著有多種情況齐疙,超過半數(shù)以上元素有且僅有一個膜楷。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/find-majority-element-lcci
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有旭咽。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處赌厅。