0
点赞
收藏
分享

微信扫一扫

【多数元素(169-java)】

yundejia 2022-01-09 阅读 24

多数元素(169-java)

public class LC50_169_majorityElement {
    //先排序,再判断个数
    public static int majorityElement(int[] nums) {
        Map<Integer, Long> collect = Arrays.stream(nums).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        for (Map.Entry<Integer, Long> integerLongEntry : collect.entrySet()) {
            if (integerLongEntry.getValue() > (nums.length / 2)) {
                return integerLongEntry.getKey();
            }
        }
        return 0;
    }

    //先排序取中间
    public static int majorityElement2(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }

    //top-k
    public static int majorityElementTopk(int[] nums) {
        int len = (nums.length + 1) / 2;
        PriorityQueue<Integer> queue = new PriorityQueue<>(len, Comparator.comparingInt(item -> -item));
        for (int num : nums) {
            queue.offer(num);
            if (queue.size() > len) {
                queue.poll();
            }
        }
        return queue.poll();
    }

    //摩尔投票法
    public static int majorityElement摩尔(int[] nums) {
        int card_num = nums[0];
        int count = 1;
        for (int i = 1; i < nums.length; i++) {
            if (card_num == nums[i]) {
                count++;
            } else if (--count == 0) {
                card_num = nums[i];
                count = 1;
            }
        }
        return card_num;
    }

    public static void main(String[] args) {
        int[] nums = {2, 2, 1, 1, 1, 2, 2};
        System.out.println(majorityElement摩尔(nums));
    }
}
举报

相关推荐

0 条评论