1. 程式人生 > 其它 >LeetCode169 多數元素

LeetCode169 多數元素

題目

給定一個大小為 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;
    }
}