zoukankan      html  css  js  c++  java
  • 数组中超过一半的元素

    数组中超过一半的元素

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
    你可以假设数组是非空的,并且给定的数组总是存在多数元素。

    解法一:

    利用排序算法,因为这个数字的出现次数超过数组长度的一半,所以排序之后,中间的数必定为答案

     int majorityElement(vector<int>& nums) {   
        sort(nums.begin(), nums.end());
        return nums[nums.size() / 2];
    }
    

    解法二:

    因为这个数字出现次数超过数组长度的一半,所以目标数字的个数 -其他数字的个数总和 >= 1,故我们利用这个性质当我们遇到目标是+1,否则-1,当count为0是重置index,之后index记录的位置一定是目标数字

    int majorityElement(vector<int>& nums) {
           int cnt = 0, ret = 0;
    
            for(int i = 0; i < nums.size(); ++i){
                if(cnt == 0) ret = nums[i];
                if(nums[i] == ret) cnt++;
                else cnt--;
            }
    
            return ret;
        }
    
  • 相关阅读:
    mangoDB
    python文档
    单例模式
    celery
    flask 部署
    json
    Docker+Jenkins+Go完成自动化部署
    Go多协程循环打印ABAC
    正则表达式
    从零开始学Go之并发(四):互斥
  • 原文地址:https://www.cnblogs.com/Lngstart/p/12505857.html
Copyright © 2011-2022 走看看