• Leetcode 229 Majority Element II


    1. 问题描写叙述

      在一个无序的整数数组nums[](大小为n)中。找出出现次数大于n/3的全部数。即找出数字numsi的出现次数k,满足k>n/3

      

    2. 方法与思路

      首先。能够通过分析得到结论:满足条件的数字个数cnt最多为2。
      证明: ifcnt>2cnt× (n/3+1 )>n 超出原数组的大小。
      然后,借鉴在数组中求出现次数超过一半的数这道题的思路:
      
      1). 第一遍扫描,设两个计数器和变量记录数组nums[]中出现频率最高的数。
      2). 第二遍扫描,计算着两个数出现的次数。
      3). 推断这两个数是否符合要求,符合则存入结果集。

    class Solution {
    public:
        vector<int> majorityElement(vector<int>& nums) {
            vector<int> re;
    
            if(nums.size() ==0) return re;
            if(nums.size() == 1) return nums;
    
            int i,num1,num2,cnt1=0,cnt2=0;
    
            //找出出现频率最高的两个数
            for(i = 0; i < nums.size(); i++)
            {
                if(cnt1 == 0 || num1 == nums[i])
                {
                    num1 = nums[i];
                    cnt1++;
                }
                else if(cnt2 == 0 || num2 == nums[i])
                {
                    num2 = nums[i];
                    cnt2++;
                }
                else
                    cnt1--,cnt2--;
            }
    
            //统计两个数出现的次数
            cnt1 = 0; cnt2 = 0;
            for(i = 0; i < nums.size(); i++)
            {
                if(nums[i] == num1) cnt1++;
                else if(nums[i] == num2) cnt2++;
            }
    
            //推断是否否何要求
            if(cnt1 > nums.size()/3)
                re.push_back(num1);
            if(cnt2 > nums.size()/3)
                re.push_back(num2);
    
            return re;
        }
    };
    
    
  • 相关阅读:
    最优装载问题---贪心算法
    windows 10 资源管理器多余盘符去除
    js版本排序改造vue版本
    async and await
    echarts问题
    vue兼容到IE9
    expdp/impdp 参数说明,中英对照
    MySQL ibdata1文件迁移
    Oracle AWR报告提取方法
    Vertica DBD 分析优化设计
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5178983.html
Copyright © 2020-2023  润新知