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

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

    题目描述

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

    思路

    1. 若一个数出现的次数超过长度的一半,那么这个数出现的次数比数组里的其他数都多
    2. 用num来存数组的数,times来存次数,遍历数组,遇到一个数若跟num相等,times++,若不相等,times--,若times为零,则num存入下一个数,最后num里存的就是那个数
    3. 注意可能会出现数组里没有数字出现的次数满足条件的情况,最后返回结果前需要判断一下

    代码

    public class Solution {
        public int MoreThanHalfNum_Solution(int [] array) {
            if (array == null || array.length == 0) {
    			return 0;
    		}
    		int num = array[0];
    		int times = 1;
    		for (int i = 1; i < array.length; i++) {
    			if (times == 0) {
    				num = array[i];
    				times = 1;
    			} else if (num == array[i]) {
    				times++;
    			} else {
    				times--;
    			}
    		}
    		times = 0;
    		for (int i = 0; i < array.length; i++) {
    			if (array[i] == num) {
    				times++;
    			}
    		}
    		if (times * 2 > array.length) {
    			return num;
    		} else {
    			return 0;
    		}
        }
    }
  • 相关阅读:
    学渣的c#复习手记 类 二 字段与属性
    学渣的c#复习手记 类 一
    一个没有验证的学生文件存储代码(试验报告性质)
    初学C语言之指针:值类型和数组
    增删改查
    python socket的send不能发送字符串解决办法
    正则
    字符串运算符r
    类的私有属性
    运算符重载__add__
  • 原文地址:https://www.cnblogs.com/rosending/p/5635210.html
Copyright © 2011-2022 走看看