LeetCode1287

LeetCode1287

目录

  • 题目描述
  • 示例
  • 思路分析
  • 代码段
  • 代码逐行讲解
  • 复杂度分析
  • 总结的知识点
  • 整合
  • 总结

题目描述

给定一个非递减的整数数组 arr,其中有一个元素恰好出现超过数组长度的 25%。请你找到并返回这个元素。


示例

示例 1

输入:

arr = [1, 2, 2, 6, 6, 6, 6, 7, 10]

输出:

6

解释:

  • 数组长度为 9,6 出现了 4 次,超过了 25%(即 2.25 次)。

示例 2

输入:

arr = [1, 1]

输出:

1

解释:

  • 数组长度为 2,1 出现了 2 次,超过了 25%(即 0.5 次)。

思路分析

问题核心

我们需要找到一个在数组中出现次数超过数组长度 25% 的元素。

思路拆解

  1. 特殊情况处理
    • 如果数组长度为 1,直接返回该元素。
  2. 计算阈值
    • 计算数组长度的 25%,即 len / 4
  3. 统计元素频率
    • 使用哈希表 Map 统计每个元素的出现次数。
  4. 判断是否超过阈值
    • 在统计过程中,如果某个元素的出现次数超过阈值,直接返回该元素。

代码段

class Solution {public int findSpecialInteger(int[] arr) {int len= arr.length;if(len==1)return arr[0];int num=len/4;Map<Integer,Integer> map=new HashMap<>();for (int count : arr) {int  temp=map.getOrDefault(count,0)+1;if(temp>num){return count;}else{map.put(count,temp);}}return -1;}
}

在这里插入图片描述


代码逐行讲解

1. 获取数组长度

int len = arr.length;
  • len 是数组的长度,用于后续计算阈值。

2. 特殊情况处理

if (len == 1)return arr[0];
  • 如果数组长度为 1,直接返回该元素。

3. 计算阈值

int num = len / 4;
  • num 是数组长度的 25%,用于判断元素是否超过阈值。

4. 初始化哈希表

Map<Integer, Integer> map = new HashMap<>();
  • map 用于统计每个元素的出现次数。

5. 遍历数组

for (int count : arr) {
  • 使用增强的 for 循环遍历数组中的每个元素。

6. 更新当前元素的频率

int temp = map.getOrDefault(count, 0) + 1;
  • temp 是当前元素的出现次数,初始值为哈希表中的值加 1。

7. 判断是否超过阈值

if (temp > num) {return count;
}
  • 如果当前元素的出现次数超过阈值,直接返回该元素。

8. 更新哈希表

map.put(count, temp);
  • 将当前元素的出现次数更新到哈希表中。

9. 返回默认值

return -1;
  • 如果没有找到符合条件的元素,返回 -1

复杂度分析

时间复杂度

  • 遍历数组一次,时间复杂度为 O(n),其中 n 是数组的长度。

空间复杂度

  • 使用了一个哈希表,最坏情况下需要存储所有元素的频率,因此空间复杂度为 O(n)

总结的知识点

1. 哈希表的使用

  • 使用 HashMap 统计元素的出现次数。

2. 边界条件处理

  • 处理数组长度为 1 的特殊情况。

3. 增强的 for 循环

  • 使用增强的 for 循环遍历数组。

4. 阈值计算

  • 计算数组长度的 25%,用于判断元素是否超过阈值。

整合

class Solution {public int findSpecialInteger(int[] arr) {int len = arr.length; // 数组长度if (len == 1) // 特殊情况处理return arr[0];int num = len / 4; // 计算阈值Map<Integer, Integer> map = new HashMap<>(); // 哈希表统计频率for (int count : arr) { // 遍历数组int temp = map.getOrDefault(count, 0) + 1; // 更新当前元素的频率if (temp > num) { // 判断是否超过阈值return count;} else {map.put(count, temp); // 更新哈希表}}return -1; // 如果没有找到,返回 -1}
}

总结

通过哈希表统计元素的出现次数,并在遍历过程中判断是否超过阈值,借助哈希表能高效地解决问题。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

恒创科技:如何重新启动 Windows 服务器

重新启动 Windows 服务器对于应用更新、解决问题和维护系统性能至关重要。定期重新启动有助于确保服务器运行最新软件、解决冲突并清除临时文件。本教程将介绍如何使用不同的方法重新启动 Windows 服务器。 注意&#xff1a;重新启动服务器之前保存所有工作&#xff0c;以避免丢…

Django ModelForm使用(初学)

1.目的是根据员工表字段&#xff0c;实现一个新增员工的数据填写页面 2.在views.py文件中按下面的格式写 定义 ModelForm 类&#xff1a;UserModelForm &#xff08;自己命名的类名&#xff09;使用时需要导入包 定义视图函数&#xff1a;user_model_form_add&#xff08;在函…

华为固态电池引发的思索

华为固态电池真牛&#xff01; 超长续航&#xff1a;单次充电即可行驶3000公里 极速充电&#xff1a;五分钟内充满80% 极致安全&#xff1a;不可燃、不漏液 长寿命设计&#xff1a;循环寿命达10000次以上 如上是华为电池展示的优势项&#xff0c;每一条都让我们心动不已。…

美信监控易:运维新时代,守护数据安全

在 2025 年这个科技飞速发展的时代&#xff0c;数据安全已成为各行业关注的焦点。随着云计算、大数据、物联网等技术的不断推进&#xff0c;运维数据的保护面临着新的挑战与要求。美信时代公司的美信监控易运维管理软件&#xff0c;以其卓越的功能、特性和竞争力&#xff0c;为…

个人博客5年回顾

https://huangtao01.github.io/ 五年前&#xff0c;看程序羊的b站视频做的blog&#xff0c;受限于网络&#xff0c;只能单向学习&#xff0c;没有人指导与监督&#xff0c;从来没有想过&#xff0c;有没有什么问题&#xff1f; 一、为什么要做个人博客&#xff1f; 二、我是怎么…

Unity合批处理优化内存序列帧播放动画

Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容&#xff0c;将多个图片合批处理然后为了降低Unity的内存占用&#xff0c;但是相对的质量也会稍微降低。可自行进行…

【Docker】容器被停止/删除的方式及命令:全面解析与实践指南

文章目录 引言一、容器的生命周期二、停止容器的命令及方式1. docker stop 命令2. docker kill 命令3. docker pause 和 docker unpause 命令4. docker restart 命令 三、删除容器的命令及方式1. docker rm 命令2. docker container prune 命令3. docker rm 与 docker rmi 的区…

大数据SQL调优专题——Flink执行原理

引入 上一篇我们了解了Spark&#xff0c;相比起MapReduce来说&#xff0c;它确实已经快了超级多了&#xff0c;但是人类的欲望是没有止境的&#xff0c;这也是推动人类进步的动力。 Flink就是为了满足实时响应的场景需求诞生的。 其实在Flink之前&#xff0c;实时处理其实已…

【Cocos TypeScript 零基础 16.1】

目录 FlappyBird背景其他心得_刚体audio部分 FlappyBird 本人没有按照老师的做法去做,大体差不多, 当然老师做的更精细,有些不会的还是参考老师的方法 参考部分 小鸟如何像真实物体一样的重力效果点击如何使小鸟飞翔 省略部分 3. 小鸟多动画(飞机大战其实有做,单纯偷懒) 4. …

CHARMM-GUI EnzyDocker: 一个基于网络的用于酶中多个反应状态的蛋白质 - 配体对接的计算平台

❝ "CHARMM-GUI EnzyDocker for Protein−Ligand Docking of Multiple Reactive States along a Reaction Coordinate in Enzymes"介绍了 CHARMM-GUI EnzyDocker&#xff0c;这是一个基于网络的计算平台&#xff0c;旨在简化和加速 EnzyDock 对接模拟的设置过程&…

腿足机器人之六- 前向运动学

腿足机器人之六- 前向运动学 刚体运动学基础坐标系定义旋转矩阵与欧拉角齐次变换矩阵&#xff08;平移旋转的统一表示&#xff09; 运动链建模串联运动链结构&#xff08;从基座到末端的关节连接&#xff09;标准Denavit-Hartenberg&#xff08;D-H&#xff09;参数法改进D-H参…

uni-app发起网络请求的三种方式

uni.request(OBJECT) 发起网络请求 具体参数可查看官方文档uni-app data:请求的参数; header&#xff1a;设置请求的 header&#xff0c;header 中不能设置 Referer&#xff1b; method&#xff1a;请求方法&#xff1b; timeout&#xff1a;超时时间&#xff0c;单位 ms&a…

【linux】更换ollama的deepseek模型默认安装路径

【linux】更换ollama的deepseek模型默认安装路径 文章目录 【linux】更换ollama的deepseek模型默认安装路径Ollama 默认安装路径及模型存储路径迁移ollama模型到新的路径1.创建新的模型存储目录2.停止ollama3.迁移现有模型4.修改 Ollama 服务配置5.重启ollama6.验证迁移是否成功…

「软件设计模式」装饰者模式(Decorator)

深入解析装饰者模式&#xff1a;动态扩展功能的艺术&#xff08;C实现&#xff09; 一、模式思想与应用场景 1.1 模式定义 装饰者模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它通过将对象放入包含行为的特殊封装对象中&#xff0c;动态地…

java项目打包成docker镜像步骤

java项目打包成docker镜像步骤 1.使用maven把java文件打包成可执行的jar包2. 打包成Dockerfile3. 把jar包和DockerFile两个文件上传到服务器上。4. 制作镜像5.启动容器 1.使用maven把java文件打包成可执行的jar包 2. 打包成Dockerfile # 先从dockerhub找到对应版本的openjdk的…

后台管理系统-项目初始化

认识vue-admin **核心交付:** 为什么要基于现成架子二次开发 什么是二次开发:基于已有的代码(项目工程,脚手架)开进行新功能的开发 所以看懂已有的框架中的既有代码,变得很重要了 1. 背景知识 后台管理系统是一种最常见的应用模式,不同的管理系统之间有很多相似的地方…

【Scrapy】Scrapy教程6——提取数据

前一小节我们拿到了页面的数据,那页面中那么多内容,我们想要其中的部分内容,该如何获取呢?这就需要对我们下载到的数据进行解析,提取出来想要的数据,这节就讲讲如何提取数据。 引入 我们编辑保存下来的shouye.html文件看下,发现这是什么鬼,全是如下图的代码。 没错…

RabbitMQ 的工作模式

目录 工作模式 Simple&#xff08;简单模式&#xff09; Work Queue&#xff08;工作队列&#xff09; Publish/Subscribe&#xff08;发布/订阅&#xff09; Exchange&#xff08;交换机&#xff09;? Routing&#xff08;路由模式&#xff09; Topics&#xff08;通配…

Copilot Next Edit Suggestions(预览版)

作者&#xff1a;Brigit Murtaugh&#xff0c;Burke Holland 排版&#xff1a;Alan Wang 我们很高兴向你介绍在本次 Visual Studio Code 发布中&#xff0c;关于 GitHub Copilot 的三个预览功能&#xff1a; Next Edit Suggestions&#xff08;NES&#xff09;Copilot Edits 的…

[qt5学习笔记]Application Example示例程序源码解析

开发环境问题 vs2022下直接打开ui、ts文件失败 解决办法如下图&#xff0c; 设置designer独立运行。估计是嵌入运行存在些许bug。 同理&#xff0c;ts编辑工具linguist也存在这个问题。 qrc rc的编辑嵌入编辑都正常&#xff0c;但分离式更稳定可靠。 qt creator编译失败 原…