题目:主元素 III
2015-08-26 00:06
567 查看
给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3
注意
数组中只有唯一的主元素
挑战
要求时间复杂度为O(n),空间复杂度为O(k)
标签 Expand
相关题目 Expand
解题思路:
维护一个有k-1个元素的map,value为值,key为出现的次数。
1.先遍历数组去初始化k-1个元素的map,若数值不存在map中,则加入map中,若存在则更新map。
2.再遍历剩下数组,若不存在map中则加入,若map中存在值,则更新map,若map中的值是0则删除该值,加入新值。
给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。
您在真实的面试中是否遇到过这个题?
Yes
样例
给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3
注意
数组中只有唯一的主元素
挑战
要求时间复杂度为O(n),空间复杂度为O(k)
标签 Expand
相关题目 Expand
解题思路:
维护一个有k-1个元素的map,value为值,key为出现的次数。
1.先遍历数组去初始化k-1个元素的map,若数值不存在map中,则加入map中,若存在则更新map。
2.再遍历剩下数组,若不存在map中则加入,若map中存在值,则更新map,若map中的值是0则删除该值,加入新值。
public class Solution { /** * @param nums: A list of integers * @param k: As described * @return: The majority number */ public int majorityNumber(ArrayList<Integer> nums, int k) { // write your code int canlen = 0 ; int start = 0; HashMap<Integer, Integer> map = new HashMap<>(); for(int i=0;i<nums.size()&&canlen<k;i++){ int tmp = nums.get(i); if(!map.containsKey(tmp)){ map.put(tmp, 1); } canlen++; } for(int j=canlen;j<nums.size();j++){ int tmp = nums.get(j); if(map.containsKey(tmp)){ map.put(tmp, map.get(tmp)+1); }else{ if(map.values().contains(0)){ map.put(tmp, 1); Integer delInteger = null; for(java.util.Map.Entry<Integer, Integer> entry:map.entrySet()){ if(0==entry.getValue()){ delInteger = entry.getKey(); break; } } map.remove(delInteger); }else{ for(java.util.Map.Entry<Integer, Integer> entry:map.entrySet()){ map.put(entry.getKey(), entry.getValue()-1); } } } } HashMap<Integer, Integer> newmap = new HashMap<>(); int maxNum = 0; int res = 0; for(int m = 0;m<nums.size();m++){ int cur = nums.get(m); if(map.containsKey(cur)){ newmap.put(cur, newmap.get(cur)==null?0:newmap.get(cur)+1); if(newmap.get(cur)>maxNum){ res = cur; maxNum = newmap.get(cur); } } } return res; } }
相关文章推荐
- 如何在C++中调用C程序?
- zstuoj 4186 表白计划(区间操作x线段树)
- CompletePack - 完全背包模板
- 自动测试平台---ATE.NET
- 如何将一列数据变为5列一换行的形式
- spring 单元测试
- 2015-8-25股市大跌
- 数论 + 公式 - HDU 4335 What is N?
- 简介二分查找算法与相关的Python实现示例
- php面向对象与面向过程两种方法给图片添加文字水印
- php基础教程
- 数据库访问性能优化
- sql server 性能优化之nolock
- javascript中alert()与console.log()的区别
- js钢琴按钮波浪式图片排列效果代码分享
- jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
- jQuery三级下拉列表导航菜单代码分享
- jquery实现的横向二级导航效果代码
- JS根据key值获取URL中的参数值及把URL的参数转换成json对象
- C++ 对象的内存布局(下)