zoukankan      html  css  js  c++  java
  • 数组中出现次数超过一半的数字

    题目描述

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
     
    解析:方法一:这道题最low的解法是,用一个hashmap存起来,最后检查
     
    如果存在数量大于一半的数,那么依次选出两个不一样的删掉,最后剩下的数字肯定为那个大于一半的数字。
    方法二:从前向后遍历,每次遇到不是0的数字,就找他后面一个不是0的且与他不相等的数字,同时设置为0。最后找到一个不为0的,遍历一遍看这个数字出现的次数是不是大于一半,如果是就返回,不是就返回0
     
    方法三  把第一个数字作为参考 count为1,从他往后找,找到一个和他不一致的count-1,count为0时 则跳到下一个作参考,若一致则标志位count++,继续重复运行,最后的参考就是可能是的那个数字,再遍历一遍看 总数是否大于一半
     
    方法三十分巧妙,代码如下:
    public class Solution {
        public int MoreThanHalfNum_Solution(int [] array) {
            int length=array.length;
            if(array==null||length<=0){
                return 0;
            }
            
            int result=array[0];
            int times=1;
            for(int i=1;i<length;i++){
                if(times==0){
                    result=array[i];
                    times=1;
                }else{
                    if(array[i]==result){
                        times++;
                    }else{
                        times--;
                    }
                }
            }
            
            times=0;
            for(int i=0;i<length;i++){
                if(result==array[i]){
                    times++;
                }
           }
                
           if(times*2<length){
               result=0;
           }
           return result;
        }
    }
  • 相关阅读:
    EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
    EF 5.0 帮助类
    EF异常:“System.InvalidOperationException”类型的未经处理的异常在 mscorlib.dll 中发生
    EF框架学习手记
    Entity Framework 学习
    C#特性-表达式树
    LINQ to SQL 运行时动态构建查询条件
    一点css 基础
    JQuery 判断复选框是否选中
    Asp.Net Server.MapPath()用法
  • 原文地址:https://www.cnblogs.com/tobemaster/p/5907791.html
Copyright © 2011-2022 走看看