zoukankan      html  css  js  c++  java
  • 169. Majority Element

    https://leetcode.com/problems/majority-element/

    本题大意:给定一个大小为n的正整数数组,求出出现了超过⌊ n/2 ⌋次的元素。假定数组不为空并且主元素一定存在。

    解题思路:本题有多种解法。

    1、统计法(最笨的办法)  先排序,然后统计次数。

     1 class Solution {
     2 public:
     3     int majorityElement(vector<int>& nums) {
     4         int n = nums.size();
     5         sort(nums.begin(), nums.end());
     6         int times = 0;
     7         int current = nums[0];
     8         for(int i = 0; i < n; i++)
     9         {
    10             if(current == nums[i]) ++times;
    11             else
    12             {
    13                 current = nums[i];
    14                 times = 0;
    15             }
    16             if( n % 2 == 0 && times >= n/2 ) break;
    17             if( n % 2 != 0 && times > n/2 ) break;
    18         }
    19         return current;
    20     }
    21 };

    2、先排序,然后找出中间元素

    class Solution {
    public:
        int majorityElement(vector<int>& nums) {
            int n = nums.size();
            sort(nums.begin(), nums.end());
            return nums[nums.size()/2];
        }
    };

    3、时间复杂度最小的算法,一遍扫描就可以得到

     1 class Solution {
     2 public:
     3     int majorityElement(vector<int>& nums) {
     4         int flag = 0;
     5         int current = nums[0];
     6         for(int i = 0; i < nums.size(); i++)
     7         {
     8             if(current == nums[i]) ++flag;
     9             else if(flag == 0) {current = nums[i]; ++flag;}
    10             else --flag;
    11         }
    12         return current;
    13     }
    14 };
  • 相关阅读:
    canvas
    canvas -矩形
    canvas
    requestAnimationFrame
    flex in css
    让 .vue 支持 atom
    前端应该知道的基础知识汇总
    css伪类总结
    制作滑动门菜单
    页面布局中遇到菱形图片时的处理办法
  • 原文地址:https://www.cnblogs.com/jingyuewutong/p/5584742.html
Copyright © 2011-2022 走看看