哈希表题目:找出数组中的幸运数

news/2023/6/7 0:13:03

文章目录

  • 题目
    • 标题和出处
    • 难度
    • 题目描述
      • 要求
      • 示例
      • 数据范围
  • 解法
    • 思路和算法
    • 代码
    • 复杂度分析

题目

标题和出处

标题:找出数组中的幸运数

出处:1394. 找出数组中的幸运数

难度

3 级

题目描述

要求

给定一个整数数组 arr\texttt{arr}arr,幸运数是在数组中的出现频次和数值相等的整数。

返回数组中的一个幸运数。如果存在多个幸运数,返回最大的那个。如果没有幸运数,返回 -1\texttt{-1}-1

示例

示例 1:

输入:arr=[2,2,3,4]\texttt{arr = [2,2,3,4]}arr = [2,2,3,4]
输出:2\texttt{2}2
解释:数组中唯一的幸运数是 2\texttt{2}2,因为数值 2\texttt{2}2 的出现频次也是 2\texttt{2}2

示例 2:

输入:arr=[1,2,2,3,3,3]\texttt{arr = [1,2,2,3,3,3]}arr = [1,2,2,3,3,3]
输出:3\texttt{3}3
解释:1\texttt{1}12\texttt{2}2 以及 3\texttt{3}3 都是幸运数,只需要返回其中最大的数。

示例 3:

输入:arr=[2,2,2,3,3]\texttt{arr = [2,2,2,3,3]}arr = [2,2,2,3,3]
输出:-1\texttt{-1}-1
解释:数组中不存在幸运数。

示例 4:

输入:arr=[5]\texttt{arr = [5]}arr = [5]
输出:-1\texttt{-1}-1

示例 5:

输入:arr=[7,7,7,7,7,7,7]\texttt{arr = [7,7,7,7,7,7,7]}arr = [7,7,7,7,7,7,7]
输出:7\texttt{7}7

数据范围

  • 1≤arr.length≤500\texttt{1} \le \texttt{arr.length} \le \texttt{500}1arr.length500
  • 1≤arr[i]≤500\texttt{1} \le \texttt{arr[i]} \le \texttt{500}1arr[i]500

解法

思路和算法

为了寻找数组中的幸运数,需要遍历数组统计每个整数的出现频次,然后寻找出现频次和数值相等的整数,并返回其中最大的数。

由于数组中的每个整数的出现频次一定是正整数,且数组中的每个元素都是正整数,因此如果幸运数存在,幸运数一定是正整数。

首先遍历数组并使用哈希表记录每个整数的出现频次。得到每个整数的出现频次之后,将幸运数初始化为 −1-11,遍历哈希表寻找最大的幸运数。哈希表中的键对应整数,值对应频次,对于哈希表中的每个键值对,如果键和值相等,则遇到一个幸运数,用该幸运数更新最大幸运数。遍历哈希表结束之后,返回幸运数。

上述做法对于数组中存在幸运数和不存在幸运数的情况都能得到正确的结果:

  • 如果数组中存在幸运数,由于幸运数一定大于 −1-11,每次都维护最大的幸运数,因此遍历哈希表结束之后可以得到最大的幸运数;

  • 如果数组中不存在幸运数,则幸运数的值不会被更新,遍历哈希表结束之后幸运数的值还是 −1-11

代码

class Solution {public int findLucky(int[] arr) {Map<Integer, Integer> map = new HashMap<Integer, Integer>();for (int num : arr) {map.put(num, map.getOrDefault(num, 0) + 1);}int lucky = -1;Set<Integer> set = map.keySet();for (int num : set) {if (num == map.get(num)) {lucky = Math.max(lucky, num);}}return lucky;}
}

复杂度分析

  • 时间复杂度:O(n)O(n)O(n),其中 nnn 是数组 arr\textit{arr}arr 的长度。需要遍历数组一次,使用哈希表记录每个整数的出现频次,然后遍历哈希表寻找最大的幸运数,由于哈希表中的键值对个数不超过 nnn,因此时间复杂度是 O(n)O(n)O(n)

  • 空间复杂度:O(n)O(n)O(n),其中 nnn 是数组 arr\textit{arr}arr 的长度。空间复杂度主要取决于哈希表,哈希表中的键值对个数不超过 nnn

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

创作风格化的3d角色插图视频教程

探索使用ZBrush、Maya和Substance Painter设计角色并使其成为最终3D图像的过程&#xff0c;并在Marvelous Designer和Photoshop中处理辅助设计工作。这个由资深角色艺术家Amy Sharpe主持的研讨会展示了她的个人工作流程&#xff0c;同时展示了一些她采用的制作技术&#xff0c;…

CDH存在隐患 : 该角色的进程使用的交换内存为xx兆字节。警告阈值:200字节

文章目录概述个人对交换内存的理解交换内存相关操作查看交换内存启用交换内存禁用交换内存永久关闭交换内存CDH隐患解决方案概述 CDH上某个服务的警告信息&#xff1a;存在隐患 : 该角色的进程使用的交换内存为xx兆字节。警告阈值:200字节 例如&#xff1a; ZooKeeper服务进程…

vmware安装oracle11g rac

文章目录1 vmware安装oracle 11gr2 rac  1.1 环境说明    1.1.1 硬件环境    1.1.2 软件安装包:    1.1.3 文件相关目录    1.1.4 网络相关配置    1.1.5 共享存储&#xff08;共享磁盘配置&#xff09;1.2 安装前的配置、安装数据库软件    1.2.1 虚…

《人物动作:角色骨骼、蒙皮制作工艺》

【目录】 1、技术标准环境 2、开工之前的检查标准 3、骨骼绑定的标准 4、附件骨骼制作标准 5、蒙皮操作标准 6、骨骼、蒙皮自检标准&#xff08;checklist&#xff09; 7、应用情景与测试报告 一、技术标准环境 3DSMax版本号&#xff1a;2016英文版 引擎必须使用Unity2017.4.5…

语义角色标注 Semantic Role Labeling(SRL) 初探(整理英文tutorial)

语义角色标注 本文链接 最近调研了一下语义角色标注&#xff0c;记录如下 将语言信息结构化&#xff0c;方便计算机理解句子中蕴含的语义信息。 语义角色标注 (Semantic Role Labeling, SRL) 是一种浅层的语义分析技术&#xff0c;标注句子中某些短语为给定谓词的论元 (语义…

Mac OS系统如何安装Oracle11g企业级数据库

大家好&#xff0c;我是Steafan&#xff0c;今天为大家讲解Mac系统如何安装Oracle11g等其他相关版本的企业级数据库并进行使用。 众所周知&#xff0c;Oracle从10的企业级版本开始就不在对Mac进行相关技术支持和运维服务&#xff0c;所以导致很多使用Mac的程序员无法进行相关工…

JavaSE(多态、abstract、接口)

1.多态 多态的概念&#xff1a;通俗来说&#xff0c;就是多种形态&#xff0c;具体点就是去完成某个行为&#xff0c;当不同的对象去完成时会产生出不同 的状态。 向上转型 向上转型&#xff1a;实际就是创建一个子类对象&#xff0c;将其当成父类对象来使用。 语法格式&…

photoshop 图片裁剪与填充前景色及背景色

有时候根据需求&#xff0c;需要对图形做一些预处理&#xff0c;为避免处理后的图形属性&#xff08;包括像素等&#xff09;发生改变&#xff0c;这里选用 Photoshop 进行处理。处理图文步骤如下&#xff1a; 1、可一次选择多个图片文件&#xff08;此处选择4个&#xff09; …