169-求众数

求众数

题目

给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。

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

示例 1:

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

示例 2:

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

思路

  • 暴力法,遍历数组,依次记录每个数字出现的次数,然后再遍历次数给出结果
  • 先排序,数组中间的数字一定是众数,排序可以使用快排
  • 摩尔投票法.此法必须用于在必定存在众数的情况下.简而言之,将数组第一个数作为过半数,然后将计数器设置为1,依次遍历,如果下一个数和当前数相同,则加一,反之减一.当计数器为0时更换下一个数为过半数.

代码

  • 暴力法不写代码
  • 先排序,再找众数(应该使用快排,此处省略)
class Solution {
    public int majorityElement(int[] nums) {
        Arrays.sort(nums);
        return nums[nums.length/2];
    }
}
  • 摩尔投票法
class Solution {
    public int majorityElement(int[] nums) {
        int result = nums[0];
        int sum = 1;
        for(int i = 1;i < nums.length;i++){
            if(result == nums[i]){
                sum++;
            }else{
                sum--;
                if(sum == 0){
                    result = nums[i];
                    sum++;
                }
            }
        }
        return result;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以...
    不要甜的红烧肉阅读 253评论 1 0
  • 写在前沿:本文代码均使用C语言编写。 Description:给定一个大小为n的数组,找到其中的众数。众数是指在数...
    小黄大大阅读 590评论 0 1
  • 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 的元素。你可以假设数组是非空的,并且给...
    genggejianyi阅读 217评论 0 0
  • 【题目描述】给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可...
    1江春水阅读 253评论 0 3
  • 给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组...
    工程师修炼之道阅读 264评论 0 0