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

LeetCode:169.多数元素(哈希表)

题目

第一版

思路

直接开个哈希表,存储每个数组中的数字和对应出现的次数。然后排序后找出对应最大value值的key。

代码

class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer>map = new HashMap<Integer,Integer>();for(int i=0;i<nums.length;i++){int cnt = map.getOrDefault(nums[i], 0);map.put(nums[i],++cnt);}List<Map.Entry<Integer,Integer>>list = new ArrayList<>(map.entrySet());Collections.sort(list, new Comparator<Map.Entry<Integer,Integer>>(){@Overridepublic int compare(Map.Entry<Integer,Integer> o1, Map.Entry<Integer,Integer> o2) {return o1.getValue().compareTo(o2.getValue());}});Map.Entry<Integer,Integer> last = list.get(list.size()-1);return last.getKey(); }
}

效率分析

12ms,击败28.66%使用 Java 的用户。说明还需要优化。

第二版

代码

class Solution {public int majorityElement(int[] nums) {Map<Integer,Integer>map = new HashMap<Integer,Integer>();for(int i=0;i<nums.length;i++){int cnt = map.getOrDefault(nums[i], 0);map.put(nums[i],++cnt);}int maxcnt = 0;int ans=0;for(Map.Entry<Integer,Integer> entry: map.entrySet()){if(maxcnt<entry.getValue()){ans = entry.getKey();maxcnt = entry.getValue();}}return ans;}
}

效率分析

11ms,击败32.60%使用 Java 的用户

第三版

思路

直接对原数组进行排序,最后返回下标为数组长度/2的元素即可。(因为是上取整,所以奇数长度的数组也适用,而且题目保证了一定会有一个众数作为答案)。

代码

class Solution {public int majorityElement(int[] nums) {Arrays.sort(nums);return nums[nums.length/2];}
}

效率分析

2ms,击败66.84%使用 Java 的用户。还行,不用继续优化了。

http://www.lryc.cn/news/255237.html

相关文章:

  • Linux指令学习
  • vue2+datav可视化数据大屏(1)
  • Linux 多进程并发设计-进程对核的亲缘设置
  • Javascript 函数介绍
  • php 粉丝关注功能实现
  • 深入浅出理解kafka ---- 万字总结
  • 一对一聊天
  • IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -Mybatis查询中返回值四种情况
  • 华为云安全组规则
  • MySQL之binlog文件过多处理方法
  • 力扣面试150题 | 88.合并两个有序数组
  • Spring Cache快速入门教程及案例
  • pycharm中debug,py文件
  • 虚拟化之指令的Trap和仿真
  • Python函数默认参数设置
  • js moment计算当前时间到24:00:00的剩余时间
  • 【UE5】瞬移+马赛克过渡效果
  • 【Skynet 入门实战练习】分布式 ID | 雪花算法 | 缓存设计 | LRU算法 | 数据库
  • ArcGIS Pro中怎么设置标注换行
  • MAX26——快速人物毛发插片工具 Hair cards tool
  • 一天一个设计模式---原型模式
  • <习题集><LeetCode><链表><2/19/21/23/24>
  • C++实现DFS、BFS、Kruskal算法和Prim算法、拓扑排序、Dijkstra算法
  • Spring 依赖注入的三种方式优缺点
  • 代理模式介绍(静态代理、jdk动态代理、cglib代理)
  • 设计模式基础——工厂模式剖析(2/2)
  • spark3.x 读取hudi报错
  • 微信小程序中block和View组件的使用区别
  • 代码混淆技术探究与工具选择
  • selenium 解决 id定位、class定位中,属性值带空格的解决办法