LeetCode169 多數元素
阿新 • • 發佈:2021-06-15
題目
給定一個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列中出現次數 大於⌊ n/2 ⌋的元素。
你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。
示例1:
輸入:[3,2,3]
輸出:3
示例2:
輸入:[2,2,1,1,1,2,2]
輸出:2
進階:
嘗試設計時間複雜度為 O(n)、空間複雜度為 O(1) 的演算法解決此問題。
方法
雜湊法
class Solution { public int majorityElement(int[] nums) { Map<Integer,Integer> map = new HashMap<>(); int length = nums.length; if(nums==null||length==0){ return 0; } if(length==1){ return nums[0]; } int res = 0; for(int num:nums){ if(map.containsKey(num)){ map.put(num,map.get(num)+1); if(map.get(num)>length/2){ res = num; break; } }else{ map.put(num,1); } } return res; } }
排序法
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
int len = nums.length;
return nums[len/2];
}
}
分治法
投票法
class Solution { public int majorityElement(int[] nums) { if(nums==null||nums.length==0){ return 0; } int currentNum = nums[0]; int count = 0; for(int num:nums){ if(count==0){ currentNum = num; count = 1; }else{ if(currentNum==num){ count++; }else{ count--; } } } return currentNum; } }