剑指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");
	}
}
相关推荐
今儿敲了吗2 分钟前
链表篇(五)——链表中间结点
数据结构·笔记·算法·链表
码农的神经元6 分钟前
2026 年数维杯A 题:抱轨式磁浮列车的悬浮电磁铁故障检测问题
人工智能·算法·数学建模
SiYuanFeng6 分钟前
面试大厂leetcode重点题型简洁明快复习(dfs/bfs,动态规划,链表,滑动窗口/双指针,回溯,ACM型输入输出,二分)
leetcode·面试·coding
斌果^O^7 分钟前
SpringBoot 实战:@Async + CompletableFuture 实现多 SQL 并行统计查询
java·spring boot·sql
weixin_456723167 分钟前
Java项目的rabbitmq配置vhost
java·rabbitmq·java-rabbitmq
QD_ANJING9 分钟前
普及一下五月AI前端面试需要达到的强度....
前端·javascript·vue.js·人工智能·面试·职场和发展
李少兄9 分钟前
解决 java.net.ConnectException: Connection refused 报错
java·开发语言·.net
-南帝-13 分钟前
行尾符格式转换问题(CRLF vs LF)如何快速解决(Agent)
java·ai
gumichef14 分钟前
栈和队列(1)
开发语言·数据结构
小新同学^O^15 分钟前
算法学习 --> 快速输入和输出
java·学习·算法