• leetcode之求众数


    求众数

    给定一个大小为 的数组,找到其中的众数。

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

    示例 1:

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

    示例 2:

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



    分析

    用到的算法是:摩尔投票算法
    算法在局部变量中定义一个序列元素(value)和一个计数器(count),

    • 初始化的情况下计数器为0.
    • 算法依次扫描序列中的元素,当处理元素x的时候,如果计数器为0,那么将x赋值给value,然后将计数器count设置为1,如果计数器不为0,那么将序列元素value和x比较,如果相等,那么计数器加1,如果不等,那么计数器减1。
    • 最后存储的序列元素(value),就是这个序列中最多的元素。


    class Solution {
        public int majorityElement(int[] nums) {
            if(nums == null) return -1;
            
            int count = 1, maj = nums[0];  //先第一个元素基准
            
            for(int i=1; i<nums.length; i++){
                if(maj == nums[i])  //找到相同的数,count++
                    count++;
                else{
                    count--;  //找不到相同的数,count--
                    if(count == 0){  // 如果计数为0,则取下一个为基准
                        maj = nums[i];
                        count = 1;
                    }
                }
            }
            return maj;
        }
    }
  • 相关阅读:
    Jzoj4765 Crisis
    Jzoj4764 Brothers
    Jzoj4764 Brothers
    Jzoj4756 幻象
    Jzoj4756 幻象
    Jzoj4755 快速荷叶叶变换
    Jzoj4755 快速荷叶叶变换
    力扣算法题—059螺旋矩阵
    力扣算法题—058最后一个单词长度
    力扣算法题—057插入区间
  • 原文地址:https://www.cnblogs.com/lisen10/p/10716356.html
Copyright © 2020-2023  润新知