LeetCode:169.多数元素(哈希表)
2023-12-13 10:05:31
题目
第一版
思路
直接开个哈希表,存储每个数组中的数字和对应出现的次数。然后排序后找出对应最大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>>(){
@Override
public 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 的用户。还行,不用继续优化了。
文章来源:https://blog.csdn.net/zhiaidaidai/article/details/134863840
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!