169. 多数元素

2023-12-21 23:43:12

给定一个大小为?n?的数组?nums?,返回其中的多数元素。多数元素是指在数组中出现次数?大于?

? n/2 ??的元素。

你可以假设数组是非空的,并且给定的数组总是存在多数元素。

示例?1:

输入:nums = [3,2,3]
输出:3

示例?2:

输入:nums = [2,2,1,1,1,2,2]
输出:2

提示:

  • n == nums.length
  • 1 <= n <= 5 * 104
  • -109 <= nums[i] <= 109

方法一:

    public static int majorityElement(int[] nums) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        int length = nums.length / 2;
        Integer result = 0;
        Set<Map.Entry<Integer, Integer>> entries = map.entrySet();
        for (Map.Entry<Integer, Integer> entry : entries) {
            if (entry.getValue() > length){
                result = entry.getKey();
            }
        }
        return result;
    }

方法2:? 0秒

    private int quickSort(int[] nums, int l, int r, int k) {
        if (l >= r) return nums[l];
        int x = nums[l + r >> 1];
        int i = l - 1;
        int j = r + 1;
        while (i < j) {
            while (nums[++i] < x) ;
            while (nums[--j] > x) ;
            if (i < j) {
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
            }
        }
        return k <= j ? quickSort(nums, l, j, k) : quickSort(nums, j + 1, r, k);
    }

    public int majorityElement(int[] nums) {
        return quickSort(nums, 0, nums.length - 1, nums.length / 2);
    }

方法3:1秒

    public int majorityElement(int[] nums) {
        int res = nums[0];
        int count = 1;
        for(int i = 1; i < nums.length; i++){
            if(nums[i] == res){
                count++;
            }
            else if(count > 1){
                count--;
            }
            else{
                res = nums[i];
            }
        }
        return res;
    }

文章来源:https://blog.csdn.net/linping_wong/article/details/135141502
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。