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

    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

    思路:1.可以使用快速排序的思路,因为出现次数超过一半的数字肯定是中位数,使用Partition函数划分数组,直到返回一个下标为(length-1)/2的元素即为所求。

               2.如果说一个数字出现次数超过数组长度的一半那么它出现的次数一定是比其他数字出现次数之和还要多的,所以可以使用一个变量来保存数字出现的次数,如果下一个数字与上一个相同则次数加一,否则减一,如果次数为零,则保存这个数字,并把次数设置为1.那么在遍历完整个数组后,最后一次把次数设置为1的元素就是所求的元素。但是这个元素不一定存在所以在最后还需要判断一下。

    思路2实现代码:

    public class Solution {
        public int MoreThanHalfNum_Solution(int [] array) {
            if(array == null || array.length == 0)
                return 0;
            
            int res = array[0];
            int times = 1;
            
            for(int i=1; i<array.length; i++) {
                if(times == 0) {
                    res = array[i];
                    times = 1;
                }
                else if(res == array[i]) {
                    times ++;
                }
                else {
                    times --;
                }
            }
            
            int checkTimes = 0;
            for(int i=0; i<array.length; i++) {
                if(res == array[i]) {
                    checkTimes ++;
                }
            }
            
            if(checkTimes * 2 <= array.length) {
                return 0;
            }
            
            return res;
        }
    }
  • 相关阅读:
    Python网络爬虫——bs4基本用法
    Python网络爬虫——requests模块(1)
    yii gii配置ip限制使用gii
    openfire连接数据库mysql
    js 提示条
    jquery滚动条平滑滑动
    yii2.0 添加组件baidu ueditor
    yii添加验证码 和重复密码
    css图标库 font-awesome.min.css
    yii配置访问路由权限配置
  • 原文地址:https://www.cnblogs.com/wxisme/p/5459635.html
Copyright © 2011-2022 走看看