• 数组中出现次数超过一半的数字


    题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为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;
        }
    }
  • 相关阅读:
    jqueryeasyui 使用笔记
    怎么查看端口占用情况?
    Ie6 Ie7 双倍padding
    Javascript获取URL
    fckeditor,用p替代div标签设置对齐方式
    ZenCart安全建站的几个措施和步骤
    复选框二选一 javascript
    dedecms从php设置里面去掉index.html
    ajax调用webservice返回DataTable "序列化类型为“System.Reflection.Module”的对象时检测到循环引用
    无题
  • 原文地址:https://www.cnblogs.com/wxisme/p/5459635.html
Copyright © 2020-2023  润新知