zoukankan      html  css  js  c++  java
  • 数组、位运算、摩尔投票法————求众数

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

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

    示例 1:

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

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

    注意:总是存在众数意思是,只有唯一的一个众数,众数的数量至少比第二多的多一个。

    方法1:

    先排序,中间的那个数肯定就是众数

     1 class Solution {
     2 public:
     3     static bool cmp(const int& a, const int& b){
     4         return a<b;
     5     }
     6     int majorityElement(vector<int>& nums) {
     7         sort(nums.begin(),nums.end(),cmp);//其实不用写cmp,默认升序排序。升序:less<int>();降序:greater<int>()
     8         return nums[nums.size()/2];
     9     }
    10 };

    方法二:摩尔投票法

    栈容器实现:

     1 class Solution {
     2 public:
     3     int majorityElement(vector<int>& nums) {
     4     stack<int> my_stack;
     5     my_stack.push(nums[0]);
     6     for(int i=1;i<nums.size();i++){
     7         if(my_stack.empty() || my_stack.top() == nums[i]){
     8             my_stack.push(nums[i]);
     9         }
    10         else{
    11             my_stack.pop();
    12         }
    13     }
    14     return my_stack.top();
    15     }
    16 };

    算法实现:

     1 class Solution {
     2 public:
     3     int majorityElement(vector<int>& nums) {
     4         int res=nums[0];
     5         int count=1;
     6         for(int i=1;i<nums.size();i++)
     7         {
     8             if(res==nums[i])
     9                 count++;
    10             else
    11             {
    12                 count--;
    13                 if(count==0)
    14                     res=nums[i+1];//因为肯定存在众数,所以count=0时候,一定存在i+1
    15             }
    16         }
    17         return res;
    18     }
    19 };
  • 相关阅读:
    P1603 斯诺登的密码
    C++ 文件操作
    Hibernate Dialect must be explicitly set
    Dijkstra算法详解
    Php 使用 fsockopen发送http请求
    再探java基础——break和continue的用法
    Android源码的下载和编译
    ALV列、行、单元格颜色设置
    数学之路(3)-机器学习(3)-机器学习算法-欧氏距离(2)
    [poj 2926]Requirements[最远曼哈顿距离]
  • 原文地址:https://www.cnblogs.com/pacino12134/p/10994411.html
Copyright © 2011-2022 走看看