【leetcode面试经典 150 题】169. 多数元素

54 阅读1分钟

题目

给定一个大小为 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 * 10^4
  • -10^9 <= nums[i] <= 10^9

代码

先排序,然后基于快慢双指针统计每个数字的数量并检查是否达到条件并跳出。

class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        int n = nums.length;
        int count = n / 2;
        int i = 0, j = 0; // 快慢双指针
        while (j <= n) { // 小心临界值
            if (j < n && nums[j] == nums[i]) {
                j++;
            } else if (j == n || nums[j] != nums[i]) { // 到下一个数值
                if (j - i > count)
                    return nums[i];
                else {
                    i = j;
                }
            }
        }
        return -1;
    }
}