力扣第21刷-多数元素

简介: 力扣第21刷-多数元素

Example 21

多数元素

题目概述:给定一个大小为 n 的数组nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于[]的元素。

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

示例1:

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

输出:3

示例2:

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

输出:2

解题思路:是如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为[]的元素(下标从 0 开始)一定是众数。

对于这种算法,先将 nums 数组排序,然后返回上文所说的下标对应的元素。下面的图中解释了为什么这种策略是有效的。在下图中,第一个例子是n 为奇数的情况,第二个例子是n 为偶数的情况。

绘图1.jpg

对于每种情况,数组下面的线表示如果众数是数组中的最小值时覆盖的下标,数组面的线表示如果众数是数组中的最大值时覆盖的下标。对于其他的情况,这条线会在这两种极端情况的中间。对于这两种极端情况,它们会在下标为[]的地方有重叠。因此,无论众数是多少,返回[]下标对应的值都是正确的。

解题步骤:

1. 将数组排序。

2. 将排序后的数组中的索引为[]的元素返回,其一定是数组中的多数元素。

 

示例代码如下:

public class MostElements {
    /**
     * 给定一个大小为 n 的数组nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于⌊ n/2 ⌋的元素。
     * 你可以假设数组是非空的,并且给定的数组总是存在多数元素。
     * 示例1:
     * 输入:nums = [3,2,3]
     * 输出:3
     * 示例2:
     * 输入:nums = [2,2,1,1,1,2,2]
     * 输出:2
     * 来源:力扣(LeetCode)
     * 链接:https://leetcode.cn/problems/majority-element
     */
    public static void main(String[] args) {
        MostElements me = new MostElements();
        System.out.println(me.majorityElement(new int[]{3, 2, 3})); // 3
    }
    /**
     * 官方
     *
     * @param nums
     * @return
     */
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length / 2];
    }
}
相关文章
|
4天前
|
算法 Java
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
[Java·算法·简单] LeetCode 27. 移除元素 详细解读
27 1
|
4天前
|
算法 C语言
【C语言】Leetcode 27.移除元素
【C语言】Leetcode 27.移除元素
22 0
【C语言】Leetcode 27.移除元素
|
4天前
【移除链表元素】LeetCode第203题讲解
【移除链表元素】LeetCode第203题讲解
|
4天前
|
算法
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
LeetCode[题解] 1261. 在受污染的二叉树中查找元素
17 1
|
3天前
|
存储
力扣 合并两个有序数列||移除元素
力扣 合并两个有序数列||移除元素
9 0
|
4天前
leetcode代码记录(下一个更大元素 II
leetcode代码记录(下一个更大元素 II
8 0
|
4天前
|
索引
leetcode代码记录(下一个更大元素 I
leetcode代码记录(下一个更大元素 I
8 0
|
4天前
leetcode代码记录(移除链表元素
leetcode代码记录(移除链表元素
10 0
|
4天前
leetcode代码记录(移除元素
leetcode代码记录(移除元素
10 0
|
4天前
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素
[leetcode~dfs]1261. 在受污染的二叉树中查找元素