当前位置: 首页 > news >正文

leeCode算法之独一无二出现次数

题目描述:

给你一个整数数组 arr,如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false

示例 1:

输入:arr = [1,2,2,1,1,3]

输出:true

解释:在该数组中,1 出现了 3 次,2 出现了 2 次,3 只出现了 1 次。没有两个数的出现次数相同。

示例 2:

输入:arr = [1,2]

输出:false

示例 3:

输入:arr = [-3,0,1,-3,1,1,1,-3,10,0]

输出:true

解题思路:

第一种做法:

1.新建哈希表,首先通过Map对象把整数数组里面的每个数的出现次数和每个数关系映射起来;

2.遍历Map对象,使用Set对象存取每个数的出现次数,并且通过Set.has() 判断对象次数是否出现过,从而找出每个数出现的次数是否是独一无二的

3.话不多说,我们直接来看代码:

    function uniqueOccurences(nums) {const map = new Map()for (let val of nums) {// 统计val出现的次数if (map.has(val)) {// 如果之前map存在这个数,则把这次val次数(1次)和 之前val次数相加map.set(val, map.get(val) + 1)} else {// 如果之前map里面不存在这个数,则只需要把这次val次数加上就行(1次)map.set(val, 1)}}let set = new Set();for (let [val, time] of map) {if (set.has(time)) {// 条件如果成立,证明每个数的出现次数不是独一无二的return false;}set.add(time)}return true;}console.log(uniqueOccurences([1, 2])) // falseconsole.log(uniqueOccurences([-3, 0, 1, -3, 1, 1, 1, -3, 10, 0])) // trueconsole.log(uniqueOccurences([1, 2, 2, 1, 1, 3])) // true

第二种做法:

利用set的特性,每次set.add()都会自动去重,如果多个数的重复次数一样,set.size的值会比原来的长度小,那么set.size和map.size不一样,这样也能证明每个数的出现次数是否是独一无二的

    function uniqueOccurences(nums) {const map = new Map()for (let val of nums) {// 统计val出现的次数if (map.has(val)) {// 如果之前map存在这个数,则把这次val次数(1次)和 之前val次数相加map.set(val, map.get(val) + 1)} else {// 如果之前map里面不存在这个数,则只需要把这次val次数加上就行(1次)map.set(val, 1)}}let set = new Set();for (let [val, time] of map) {set.add(time)}return set.size === map.size;}console.log(uniqueOccurences([1, 2])) // falseconsole.log(uniqueOccurences([-3, 0, 1, -3, 1, 1, 1, -3, 10, 0])) // trueconsole.log(uniqueOccurences([1, 2, 2, 1, 1, 3])) // true

相关文章:

  • 自由浮动时间和总浮动时间对比
  • 贷中业务提额、降额策略
  • (eNSP)策略路由实验配置
  • Java中有哪些锁?
  • OpenShift AI - 模型注册管理
  • 绕线机的制作与研究
  • ‌人工智能在农作物病虫害识别中的应用前景分析
  • 【LUT技术专题】基于扩展卷积的极快速LUT算法
  • 如何快速获取旺店通奇门原始数据至本地
  • 嵌入式软件学习指南:从入门到进阶
  • STM32基础教程——软件SPI
  • Cadence 高速系统设计流程及工具使用二
  • 前端面经-VUE3篇(四)--pinia篇-基本使用、store、state、getter、action、插件
  • MDP相关内容
  • 贵州省棒球运动发展中长期规划(2024-2035)·棒球1号位
  • 第二天 网络与通信协议
  • 【c++】 我的世界
  • 汽车加气站操作工考试知识点总结
  • 手机端调试工具 eruda 使用方法
  • C++ 中的 `it->second` 和 `it.second`:迭代器与对象访问的微妙区别
  • 公示!17个新职业、42个新工种亮相
  • 万达电影:股东杭州臻希拟减持不超1.3927%公司股份
  • 公积金利率降至历史低位,百万房贷30年省5万
  • 福特汽车撤回业绩指引,警告关税或造成15亿美元利润损失
  • 德国联邦议院6日下午将举行总理选举第二轮投票
  • 柳向春:关于美国国会图书馆所藏《全芳备祖》的一些故事