剑指offer面试题29 数组中出现次数超过一半的数字

考察点

java 复制代码
数组

知识点

题目

分析

本题目要求数组中出现次数超过一半的数字,其实是需要有一点数学思维,遍历数组,假设第一个元素就是超过一半的元素,并且记录元素出现的次数times,当遇到跟他一样的元素的时候times++,不一样的时候times--,直到times=0的时候可以暂时说明这个元素出现的次数肯定不是超过一半的,超过一半的元素最终times一定是大于0的那个

java 复制代码
public class TwentyNine {
	public static void main(String[] args) {
		int[] arr = {1,2,3,2,2,2,5,4,2};
		try {
			System.out.println(findMHalf(arr));
		} catch (Error e) {
			System.out.println(e);
		}
		int[] brr = {1,2,3,2,2,5,5,4};
		try {
			System.out.println(findMHalf(brr));
		} catch (Error e) {
			System.out.println(e);
		}
	}
	public static int findMHalf(int[] arr) {
		if (arr == null||arr.length <= 0) {
			throw new Error("input error");
		}
		int result = arr[0];
		int times = 1;
		for (int i = 1;i<arr.length;i++) {
			if (result == arr[i]) {
				times++;
			} else if(times > 0) {
				times--;
			} else {
				result = arr[i];
				times = 1;
			}
		}
		int count = 0;
		for (int i = 0;i<arr.length;i++) {
			if(result == arr[i]) {
				count++;
			}
		}
		if (count > arr.length/2) {
			return result;
		}
		throw new Error("input error");
	}
}
相关推荐
2601_953824614 分钟前
基于SSM的水果超市管理系统
java·tomcat·maven
guo_wen_qiang6 分钟前
springboot如何自定义一个启动器starter
java·spring boot·intellij-idea
许彰午10 分钟前
55-字典缓存与通知SPI
java·低代码·架构
captain37615 分钟前
HTTP(2)
java·网络·http·java-ee
徐子童17 分钟前
介绍MVCC机制
java·mysql·面试题·秋招·并发·mvcc
Wang's Blog18 分钟前
Java 项目实战: 外卖平台-启用禁用员工账号与Long精度丢失修复
java·服务器
开开心心就好23 分钟前
安卓手写文字生成工具,多种纸张一直免费
网络·网络协议·tcp/ip·leetcode·智能手机·电脑·模拟退火算法
乌暮23 分钟前
Java 抽象类与接口详解:半成品图纸 vs 能力合同
java·开发语言·后端·学习
All for pursuit.24 分钟前
【栈-5】84.柱状图中最大的矩形
数据结构·c++·算法·leetcode
一条泥憨鱼30 分钟前
苍穹外卖【day12| 工作台,通过Apache POI导入/导出运营数据】
java·后端·苍穹外卖