【剑指 offer】数组中出现次数超过一半的数字

news2024/9/24 17:19:37

请添加图片描述

✨个人主页:bit me👇
✨当前专栏:算法训练营👇

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

核心考点: 数组使用,简单算法的设计

描述:

给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组[1,2,3,2,2,2,5,4,2]。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。

数据范围:n ≤ 50000,数组中元素的值 0 ≤ val ≤ 10000
 
要求:空间复杂度:O(1),时间复杂度 : O(n)

输入描述:

保证数组输入非空,且保证有解

示例1:

输入:[1,2,3,2,2,2,5,4,2]
返回值:2

示例2

输入:[3,3,3,3,2,2,2]
返回值:3

示例3

输入:[1]
返回值:1

思路:

  • 方法一:定义map,使用<数字,次数>的映射关系,最后统计每个字符出现的次数
  • 方法二:排序,出现次数最多的数字,一定在中间位置。然后检测中间出现的数字出现的次数是否符合要求
  • 方法三:目标条件:目标数据超过数组长度的一半,那么对数组,我们同时去掉两个不同的数字,到最后剩下的一个数就是该数字。如果剩下两个,那么这两个也是一样的,就是结果),在其基础上把最后剩下的一个数字或者两个回到原来数组中,将数组遍历一遍统计一下数字出现次数进行最终判断。

方法一:

import java.util.Map;
import java.util.HashMap;

public class Solution {
	public int MoreThanHalfNum_Solution(int [] array) {
		if(array == null){
			return 0;
		}
		
		Map<Integer, Integer> map = new HashMap<>();
		for(int i = 0; i < array.length; i++){
			if(map.containsKey(array[i])){
				int count = map.get(array[i]);
				count++;
				map.put(array[i], count);
			}else{
				map.put(array[i], 1);
			}
			if(map.get(array[i]) > array.length / 2){
				return array[i];
			}
		}
		return 0;
	}
}

方法二:

import java.util.Arrays;
public class Solution {
	public int MoreThanHalfNum_Solution(int [] array) {
		if(array == null){
			return 0;
		}
		Arrays.sort(array);
		int target = array[array.length/2];
		int count = 0;
		for(int i = 0; i < array.length; i++){
			if(target == array[i]){
				count++;
			}
		}
		if(count > array.length/2){
			return target;
		}
		return 0;
	}
}

方法三:

public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        if(array == null){
            return 0;
        }

        int target = array[0];
        int times = 1;
        
        for(int i = 1; i < array.length; i++){
            if(times == 0){
                target = array[i];
                times = 1;
            }
            else if(array[i] == target){
                times++;
            }
            else{
                times--;
            }
        }
            times = 0;
        for(int i = 0; i < array.length; i++){
            if(target == array[i]){
                times++;
            }
        }

        return times > array.length/2 ? target : 0;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/452339.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

php:php-fpm平滑重启为什么无效

一、问题 今天修改了fpm一些配置&#xff0c;需要上线重启fpm&#xff0c;但是发现一瞬间出现很多502的错误请求&#xff0c;查看日志发现以下错误 fpm&#xff1a;重启日志 nginx&#xff1a;错误日志 2023/04/23 15:19:00 [error] 9#0: *1893053661 recv() failed (104: Co…

【服务器数据恢复】重装系统导致分区无法访问的数据恢复案例

服务器数据恢复环境&#xff1a; 磁盘柜raid卡15块磁盘组建一组raid5磁盘阵列&#xff0c;划分2个lun&#xff1b; 上层操作系统划分若干分区&#xff0c;通过LVM扩容方式将其中一个分区加入到了root_lv中&#xff0c;其他分区格式化为XFS文件系统。 服务器故障&#xff1a; 为…

S/MIME电子邮件证书,符合FDA邮件安全要求

美国食品和药物管理局 &#xff08;FDA&#xff09;要求合作伙伴提交或接收电子监管信息时&#xff0c;必须使用数字证书保障通信安全。 01 为什么FDA使用数字证书保障通信安全&#xff1f; 为了维护数据完整性、准确性,有组织地管理文件,FDA为接受机构的电子监管提交设置了电子…

基于开源 web3引擎的三维系统的开发

目录 结合图像特征的平滑恢复技术 1.开发步骤 &#xff12; 应用案例开发 结束语 应用 &#xff37;&#xff45;&#xff42;&#xff13;&#xff24; 引擎开发的计算机仿真系统或虚拟现实系统均需在 &#xff37;&#xff45;&#xff42; 浏览 器 上 运 行 &#xff0…

MII、 RMII、 GMII、 RGMII 接口介绍

1、RGMII 接口概要 以太网的通信离不开物理层 PHY 芯片的支持&#xff0c;以太网 MAC 和 PHY 之间有一个接口&#xff0c;常用的接口有MII、 RMII、 GMII、 RGMII 等。 MII&#xff08;Medium Independent Interface&#xff0c; 媒体独立接口&#xff09;&#xff1a; MII 支持…

技术招聘演化论:怎样从纸上答题升级到实战编程?

创新赛道的出现 一些企业或许已经对招聘管理系统&#xff08;Applicant Tracking System&#xff0c;简称 ATS&#xff09;有一定了解&#xff0c;ATS 可以帮助企业管理招聘流程&#xff0c;其中包括发布招聘信息、接收简历、筛选候选人和安排面试等。在中国&#xff0c;一些知…

seata1.6.0 单机,集群搭建 基于nacos注册中心 mysql数据库

seata1.6.0 单机&#xff0c;集群搭建 基于nacos注册中心 mysql数据库 大纲 1 单机搭建2 集群搭建 由于项目中的dubbo版本为2.6.0 故客户端程序&#xff08;TM RM&#xff09;使用seata-all 1.4.2 &#xff0c;服务端&#xff08;TC&#xff09;使用seata-server-1.6.0.zip …

SQL Server基础 第六章 聚合函数和分组查询

前言 在数据查询的很多场合&#xff0c;除了需要显示数据表的原始数据&#xff0c;还需要对这些数据进行分析、汇总以及求极值等&#xff0c; 如获取公司员工的人数、工资总额、最高工资、最低工资和平均工资等。本章我们将通过学习SQL Server 聚合函数轻松获取上述数据。另外&…

基于Java+SpringBoot+vue学生学习平台详细设计实现

基于JavaSpringBootvue学生学习平台详细设计实现 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文章目…

软件架构的演进(超详细)

文章目录 前言1、什么是单体架构2、分布式架构3、SOA架构4、微服务架构总结 前言 之前对各种架构一直有所了解&#xff0c;但也只是了解&#xff0c;没有过多的研究为什么架构在慢慢演进&#xff0c;新架构代替老架构的理由是什么&#xff0c;而刚好最近学习了一下架构的演进过…

人工智能会取代人工翻译吗?

当今社会正处于语言和技术高速发展的阶段&#xff0c;因此语言和技术的碰撞是不可避免的——甚至有些人说这种碰撞已经发生了&#xff0c;我们只是在等待尘埃落定。数字化、物联网、人工智能和机器学习&#xff0c;以及更进一步——智能手机、语音识别&#xff0c;以及互联网和…

27《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》中文分享

​《Protein Actions Principles and Modeling》-《蛋白质作用原理和建模》 本人能力有限&#xff0c;如果错误欢迎批评指正。 第六章&#xff1a;The principles of protein folding kinetics &#xff08;蛋白质折叠动力学的原理&#xff09; 整个二级结构通常作为一个单…

JS规范及常见问题

数字和字符串不能混合使用。 做加减法可能出错 "1"1 "11"做判断可能出错 "2"<"11"false几种for循环的使用: for(var i0;i<list.length;i): es5,需要拿到下标时、遍历非标准数组如FileList时for(var i in obj): es5,遍历对象时…

SpringBoot接口传递自定义参数,参数解析器

Hi I’m Shendi SpringBoot接口传递自定义参数&#xff0c;参数解析器 简介 我的需求&#xff1a;编写了一个日志微服务&#xff0c;使用方式是 创建日志对象 - 日志流程 - 完成日志对象&#xff0c;这样的方式使用时就需要在每个接口都去创建和完成一下&#xff0c;多出了一点…

查看 AndroidManifest.xml 文件内容,解决全是二进制代码问题

想查看打包后apk的AndroidManifest.xml文件内容&#xff0c;之前都是将后缀apk改为zip&#xff0c;直接解压查看&#xff0c;有时会遇到都是二进制代码&#xff0c;给出集中查看明文的方法&#xff1a; 方法一、通过android studio自带的Analyze apk 功能 通过 studio Build …

9.7 字符串的指针和指向字符串的指针变量

9.7 字符串的指针和指向字符串的指针变量 一.字符串表示形式二.字符串指针做函数参数1.数组名做函数参数2.数组指针做函数参数 三.字符指针变量与字符数组&#xff08;1&#xff09;字符数组是由若干个元素组成&#xff0c;每个元素中存放一个字符。&#xff08;2&#xff09;赋…

优化配置Little Snitch for Mac的规则和设置

Little Snitch for Mac是一款专业的macOS防火墙软件&#xff0c;它可以帮助你控制应用程序是否访问网络或者磁盘&#xff0c;并对系统不可信的进程和信息进行监控。如果你想保护你的Mac的网络安全&#xff0c;那么你需要了解如何配置和优化Little Snitch for Mac的规则和设置。…

证件照换底色,快试试这3种方法,方便还快捷

由于我们不论是在生活还是学习中&#xff0c;有时候总会要上传一些证件照&#xff0c;而当你手上有证件照准备上传时&#xff0c;发现底色不对&#xff0c;是不是很抓狂&#xff0c;电子证件照片换底色怎么弄&#xff1f;很多小伙伴还在因为证件照底色不对而重新拍&#xff1f;…

PureComponent和React.memo()区别

文章目录 前言一、区别二、用法 前言 本篇文章主要讲解了&#xff0c;PureComponent和React.memo()区别及用法。 一、区别 PureComponent 和 React.memo() 都是 React 中优化组件性能的方式。 PureComponent 是一个类组件&#xff0c;而 React.memo() 是一个高阶函数。 Reac…

什么蓝牙耳机适合学生党?学生党蓝牙耳机性价比排行

现如今&#xff0c;市场上有各种各样的品牌和蓝牙耳机&#xff0c;让人在选择时不免眼花缭乱。作为学生党&#xff0c;在选择一样东西的时候&#xff0c;性价比无疑会成为其选择的重要参考因素。下面&#xff0c;我来给大家分享几款适合学生党的高性价比蓝牙耳机&#xff0c;一…