zoukankan      html  css  js  c++  java
  • 剑指 Offer 39. 数组中出现次数超过一半的数字

    地址  https://leetcode-cn.com/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban-de-shu-zi-lcof/

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
    
    你可以假设数组是非空的,并且给定的数组总是存在多数元素。
    
    
    示例 1:
    输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
    输出: 2
     
    
    限制:
    1 <= 数组长度 <= 50000

    解答

    1  使用哈希表记录每个元素出现的次数 找到出现最多的或者出现一半以上的就是我们要求的答案

    class Solution {
    public:
        unordered_map<int,int> mm;
        int majorityElement(vector<int>& nums) {
            int maxcount=0; int idx=-1;
            int size = nums.size();
            for( int i = 0;i<nums.size();i++){
                mm[nums[i]]++;
                int count = mm[nums[i]];
                if(count > size/2) return nums[i];
                if(maxcount < count){
                    maxcount= count; idx =i;
                }
            }
            return  nums[idx];
        }
    };

    2 众数如果存在则排序后的中间索引的数字一定是该数值,因为众数要是数组中一半以上的数值,

    那么距离中间所以最远的位置就是开头和结尾,从开头和结尾计算一半以上的索引位置一定包括中间索引的位置,那么距离中间索引更近距离的位置必然也是如此

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            sort(nums.begin(),nums.end());
            return nums[nums.size()/2];
        }
    };
    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    openlayers wfs获取要素
    ArcEngine 直连连接SDE
    arcgis中的 style和serverstyle
    C#开源大全
    C#+ArcEngine 序列化和反序列化AE对象
    C# lazy加载
    Testing 理论测试(三)
    软件开发模型种类(7)
    Testing理论测试题(二)
    Testing 理论测试题(一)
  • 原文地址:https://www.cnblogs.com/itdef/p/14413965.html
Copyright © 2011-2022 走看看