剑指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");
	}
}
相关推荐
json{shen:"jing"}5 小时前
分割回文串-暴力法
java·算法
没有bug.的程序员5 小时前
Maven 进阶进阶:依赖优化内核、多模块构建艺术与“依赖地狱”自愈指南
java·maven·构建·多模块·依赖优化
毕设源码-赖学姐5 小时前
【开题答辩全过程】以 基于Java的外卖点餐网站为例,包含答辩的问题和答案
java·开发语言
niuniudengdeng5 小时前
基于调度驱动与内存主动数据供给的非冯·诺依曼智能架构
算法
追随者永远是胜利者5 小时前
(LeetCode-Hot100)4. 寻找两个正序数组的中位数
java·算法·leetcode·职场和发展·go
追随者永远是胜利者5 小时前
(LeetCode-Hot100)2. 两数相加
java·算法·leetcode·go
初夏睡觉5 小时前
每日一题( P1518 [USACO2.4] 两只塔姆沃斯牛 The Tamworth Two)(第二天)
算法
L_Aria5 小时前
3824. 【NOIP2014模拟9.9】渴
c++·算法·图论
gorgeous(๑>؂<๑)5 小时前
【ICLR26-Oral Paper】透过对比的视角:视觉语言模型中的自改进视觉推理
人工智能·算法·语言模型·自然语言处理
前路不黑暗@5 小时前
Java项目:Java脚手架项目通用基类和常量类的封装(九)
java·spring boot·笔记·学习·spring cloud·maven·intellij-idea