標籤:
Majority Element II
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times. The algorithm should run in linear time and in O(1) space.
https://leetcode.com/problems/majority-element-ii/
使用Moore voting algorithm,時間複雜度是O(3n),空間複雜度是O(1)。
1 /** 2 * @param {number[]} nums 3 * @return {number[]} 4 */ 5 var majorityElement = function(nums) { 6 var i = 0, res = null, trinity = [], curr = null; 7 var result = []; 8 for(i = 0; i < nums.length; i++){ 9 curr = nums[i];10 res = isInTrinity(curr, trinity);11 if(res !== -1){12 trinity[res].count++;13 }else{14 if(trinity.length <= 1){15 trinity.push({key : curr, count : 1});16 }else{17 trinity[1].count--;18 if(trinity[1].count === 0){19 trinity.pop();20 }21 trinity[0].count--;22 if(trinity[0].count === 0){23 trinity.shift();24 }25 }26 }27 } 28 if(trinity[0]){29 verifyNum(trinity[0].key, result);30 }31 if(trinity[1]){32 verifyNum(trinity[1].key, result);33 }34 return result;35 36 function verifyNum(num, result){37 var count = 0;38 for(i = 0; i < nums.length; i++){39 if(nums[i] === num){40 count++;41 }42 }43 if(count > nums.length / 3){44 result.push(num);45 }46 }47 function isInTrinity(num, trinity){48 for(var i = 0; i < trinity.length; i++){49 if(trinity[i].key === num){50 return i;51 }52 }53 return -1;54 }55 };
[LeetCode][JavaScript]Majority Element II