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;
        }
    
  • 相关阅读:
    使用fiddler2抓取手机发出的请求信息
    HTML转义字符集合
    spm3安装和使用
    JSP
    Servlet
    Struts2
    java多线程-消费者和生产者模式
    java异常处理机制(try-catch-finally)
    java内部类
    java上转型和下转型(对象的多态性)
  • 原文地址:https://www.cnblogs.com/Lngstart/p/12505857.html
Copyright © 2011-2022 走看看