- 浏览: 185345 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
abc20899:
对啊!报错!楼主你测试了吗?
Java7 - 新特性之对集合类的语言支持 -
zskangs1126:
Facebook 的系统架构 -
ccxiajie:
List list={"hello"}; ...
Java7 - 新特性之对集合类的语言支持 -
luoyahu:
请不要把你的兴趣变成工作,因为那样会毁了你的兴趣。
一些对程序员的建议(不要轻易的让人帮你决定,那怕是你的家人) -
coral0212:
我也尝试创过业,但我觉得我这种人是“谋士”,不是能攻城拔寨的“ ...
一些对程序员的建议(不要轻易的让人帮你决定,那怕是你的家人)
电话面试算法题一道:找出数组中重复次数最多的元素并打印
问题不难,看你能给出更优的方案
import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import commons.algorithm.sort.QuickSort; /** * 找出数组中重复次数最多的元素并打印 * */ public class Problem_3 { //先快速排序后循环查找 O( n*log2(n) + n ) public static void find1(int[] arr){ QuickSort.sort(arr); int max = arr[0]; int pre=1; int now=1; for(int i=0;i<(arr.length-1);i++){ if(arr[i]==arr[i+1]) now++; else { if(now>=pre){ pre=now; now=1; max=arr[i]; } } } } //嵌套循环查找 O(n*n) public static void find2(int[] arr){ int pre=0; int max=arr[0]; for(int i=0;i<arr.length;i++){ int now=0; for(int j=0;j<arr.length;j++){ if(arr[i]==arr[j]) { now++; } } if(now>=pre){ max=arr[i]; pre=now; } } } //通过 Hash 方式 public static void find3(int[] arr){ HashMap<Integer,Integer> hm=new HashMap<Integer, Integer>(); for(int i=0;i<arr.length;i++){ if(hm.containsKey(arr[i])) { int count=hm.get(arr[i]); hm.put(arr[i], ++count); }else{ hm.put(arr[i],1); } } Iterator<Entry<Integer, Integer>> it=hm.entrySet().iterator(); int pre=0; int max=arr[0]; while(it.hasNext()) { Entry<Integer, Integer> en=it.next(); int key=en.getKey(); int val=en.getValue(); if(val>pre){ pre=val; max=key; } } } public static void main(String args[]){ //数据量800 重复元素多,查找时候分别是: 46 3680 195 int arr2[]={0,1,2, ..... ,0,1,2,3,6,7,8,9}; //数据量800 重复元素少,查找时间分别是 82 3727 360 int arr[]={0,0,0,11,12,13,14,5,6 ...... ,51,52,53,,728,29,730,731,3,794,95,796,797,798,799}; long start,end; start=System.currentTimeMillis(); for(int i=0;i<1000;i++) find1(arr); end=System.currentTimeMillis(); System.out.println(end-start); start=System.currentTimeMillis(); for(int i=0;i<1000;i++) find2(arr); end=System.currentTimeMillis(); System.out.println(end-start); start=System.currentTimeMillis(); for(int i=0;i<1000;i++) find3(arr); end=System.currentTimeMillis(); System.out.println(end-start); } }
评论
30 楼
sunhj000java
2010-10-07
我认为这道题的关键是如何遍历这个数据集合,如果能不用遍历集合而找出出现最多的次数的数字是这道题的关键。
我们可以用hashmap保存数据出现的个数,并且用两个变量保存出现最多的次数(max1)和次多的次数(max2),当剩下的数据个数小于max1-max2,那么我们就找出了这个数字了。
最优为n/2 最差为n
我们可以用hashmap保存数据出现的个数,并且用两个变量保存出现最多的次数(max1)和次多的次数(max2),当剩下的数据个数小于max1-max2,那么我们就找出了这个数字了。
最优为n/2 最差为n
29 楼
worldwalk
2010-10-07
xjwm 写道
只想问一句, 在项目里面会用到吗?
我倒是感觉笔试面试的题目项目中不会怎么用到,做项目和考试不是一个思路。 所以面试前要多做一些类似的题目,熟悉一下思路
28 楼
zhzhwe
2010-10-07
int arr[] = { 1, 2, 5, 5, 6, 6, 9, 5, 3, 3, 4, 4, 4, 4, 5, 2, 2, 2, 2,
2, 7, 7, 7, 7, 7, 7 };
//定义MAP KEY表示存放的数字,VALUES表示出现的次数
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int n : arr) {
if (map.containsKey(n)) {
map.put(n, map.get(n) + 1);
} else {
map.put(n, 1);
}
}
//遍厉MAP
for (Map.Entry<Integer, Integer> m : map.entrySet()) {
System.out.println(m.getKey() + " 出现了 " + m.getValue() + " 次.");
}
}
2, 7, 7, 7, 7, 7, 7 };
//定义MAP KEY表示存放的数字,VALUES表示出现的次数
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int n : arr) {
if (map.containsKey(n)) {
map.put(n, map.get(n) + 1);
} else {
map.put(n, 1);
}
}
//遍厉MAP
for (Map.Entry<Integer, Integer> m : map.entrySet()) {
System.out.println(m.getKey() + " 出现了 " + m.getValue() + " 次.");
}
}
27 楼
xiaoyao312
2010-10-07
电话考察,那可得有足够编程经验和灵活的编程思想才能应付的了啊!
26 楼
0704681032
2010-10-07
iamlotus 写道
用Hash的各位算过Hash的开销没有?不能光考虑时间复杂度,还要考虑空间复杂度。如果没有更多附加空间怎么办?
既然是电面,首先问明白限制条件,数据量是多大,K/M/G/T?重复数据占比?有没有附加空间/时间要求?
数据量K,随便怎么搞。
数据量M,QuickSort
数据量G,MergeSort了,因为内存不够要用IO
数据量T,MapReduce,否则单机处理不过来
重复数据非常多,考虑用Hash {data->repeatCount},以空间换时间
重复数据少,还是老老实实排序吧,Hash的空间开销蛮大的,而且resize相当慢。
复杂度分析来说,每个数据至少访问一遍,不可能有比O(n)更好的,这就是个考实现的题。既然是实现,当然要搞清楚环境,哪有闷着头写程序的道理。
既然是电面,首先问明白限制条件,数据量是多大,K/M/G/T?重复数据占比?有没有附加空间/时间要求?
数据量K,随便怎么搞。
数据量M,QuickSort
数据量G,MergeSort了,因为内存不够要用IO
数据量T,MapReduce,否则单机处理不过来
重复数据非常多,考虑用Hash {data->repeatCount},以空间换时间
重复数据少,还是老老实实排序吧,Hash的空间开销蛮大的,而且resize相当慢。
复杂度分析来说,每个数据至少访问一遍,不可能有比O(n)更好的,这就是个考实现的题。既然是实现,当然要搞清楚环境,哪有闷着头写程序的道理。
说的很有道理...
25 楼
东四环屠夫
2010-10-06
笔试题都犯不着搞这么长的答案。。 用 HashMap 即可。
电话面试主要是看你能不能干活,问点基础而已,至少基本库要知道吧。
电话面试主要是看你能不能干活,问点基础而已,至少基本库要知道吧。
24 楼
grayhound
2010-10-06
楼上的各位有没有想过map.get()方法的时间复杂度?
23 楼
xjwm
2010-10-06
只想问一句, 在项目里面会用到吗?
22 楼
笑我痴狂
2010-10-06
首先要看 数组是不是已经排好序的
如果是没有排序的 要想想要不要排好序后再去查找
方案一:没有排序的数组 ,用hashMap去存储,key是数组元素,value是出现的次数
方案二:如果是有序数组 , 只记录当前出现次数最多的数组值 , 每次去遍历下一个数组值的时候,直接跳过n个(n就是当前出现次数最多的次数),因为是排好序的, 所以在检测下一个值时,先记录下要检测的这个值,然后向后跳跃n-1个,如果跳跃之后的这个值跟你之前记录下的值比较不想等,就说明跳跃过的这几个值中间不可能出现比当前出现次数最多的值还多,这样算下了 时间复杂度就小于O(n)
如果是没有排序的 要想想要不要排好序后再去查找
方案一:没有排序的数组 ,用hashMap去存储,key是数组元素,value是出现的次数
方案二:如果是有序数组 , 只记录当前出现次数最多的数组值 , 每次去遍历下一个数组值的时候,直接跳过n个(n就是当前出现次数最多的次数),因为是排好序的, 所以在检测下一个值时,先记录下要检测的这个值,然后向后跳跃n-1个,如果跳跃之后的这个值跟你之前记录下的值比较不想等,就说明跳跃过的这几个值中间不可能出现比当前出现次数最多的值还多,这样算下了 时间复杂度就小于O(n)
21 楼
gundumw100
2010-10-06
貌似可以采用如下算法,我只是猜想,楼主不妨改改试试。
/**
* 统计字符出现次数
* @param s
*/
public Map<Character, Integer> getStatistics(String s) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
int i, size = s.length();
for (i = 0; i < size; i++) {
char c = s.charAt(i);
map.put(c, map.containsKey(c) ? ((Integer) map.get(c) + 1) : 1);
}
return map;
}
/**
* 统计字符出现次数
* @param s
*/
public Map<Character, Integer> getStatistics(String s) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
int i, size = s.length();
for (i = 0; i < size; i++) {
char c = s.charAt(i);
map.put(c, map.containsKey(c) ? ((Integer) map.get(c) + 1) : 1);
}
return map;
}
20 楼
InsonSiu
2010-10-06
学习了,在没有看到回复前,我应该会用两个数组去比较,但现在觉得terencewong的方法会更好。
19 楼
flyingpig4
2010-10-06
iamlotus的说法很有见解
18 楼
iamlotus
2010-10-06
用Hash的各位算过Hash的开销没有?不能光考虑时间复杂度,还要考虑空间复杂度。如果没有更多附加空间怎么办?
既然是电面,首先问明白限制条件,数据量是多大,K/M/G/T?重复数据占比?有没有附加空间/时间要求?
数据量K,随便怎么搞。
数据量M,QuickSort
数据量G,MergeSort了,因为内存不够要用IO
数据量T,MapReduce,否则单机处理不过来
重复数据非常多,考虑用Hash {data->repeatCount},以空间换时间
重复数据少,还是老老实实排序吧,Hash的空间开销蛮大的,而且resize相当慢。
复杂度分析来说,每个数据至少访问一遍,不可能有比O(n)更好的,这就是个考实现的题。既然是实现,当然要搞清楚环境,哪有闷着头写程序的道理。
既然是电面,首先问明白限制条件,数据量是多大,K/M/G/T?重复数据占比?有没有附加空间/时间要求?
数据量K,随便怎么搞。
数据量M,QuickSort
数据量G,MergeSort了,因为内存不够要用IO
数据量T,MapReduce,否则单机处理不过来
重复数据非常多,考虑用Hash {data->repeatCount},以空间换时间
重复数据少,还是老老实实排序吧,Hash的空间开销蛮大的,而且resize相当慢。
复杂度分析来说,每个数据至少访问一遍,不可能有比O(n)更好的,这就是个考实现的题。既然是实现,当然要搞清楚环境,哪有闷着头写程序的道理。
17 楼
bao231
2010-10-06
首先要搞清楚,面试考的是什么方面的?不要乱提意见
我感觉他的考查点位:循环一次就能找到最大的重复元素。
我感觉他的考查点位:循环一次就能找到最大的重复元素。
16 楼
gosin
2010-10-06
用HashMap就行了。
15 楼
phyeas
2010-10-06
LZ,要看你的测试数据量…这种题主要时间都花在查找上,hash方式的查找效率是很快的,而其他方式则会受到查找时间的限制
14 楼
phyeas
2010-10-06
想到最小完美哈希函数,不过生成函数的效率不高…

13 楼
leves
2010-10-06
<p>
</p>
<pre name="code" class="java">public static void find3(int[] arr){
HashMap<Integer,Integer> hm=new HashMap<Integer, Integer>();
for(int i=0;i<arr.length;i++){
if(hm.containsKey(arr[i])) {
int count=hm.get(arr[i]);
hm.put(arr[i], ++count);
}else{
hm.put(arr[i],1);
}
}
Iterator<Entry<Integer, Integer>> it=hm.entrySet().iterator();
int pre=0;
int max=arr[0];
while(it.hasNext()) {
Entry<Integer, Integer> en=it.next();
int key=en.getKey();
int val=en.getValue();
if(val>pre){
pre=val;
max=key;
}
}
//System.out.println(max);
}</pre>
<p> </p>
<p>用Hash的方式写的,为什么测试的时候速度上反而是最慢的</p>
</p>
<pre name="code" class="java">public static void find3(int[] arr){
HashMap<Integer,Integer> hm=new HashMap<Integer, Integer>();
for(int i=0;i<arr.length;i++){
if(hm.containsKey(arr[i])) {
int count=hm.get(arr[i]);
hm.put(arr[i], ++count);
}else{
hm.put(arr[i],1);
}
}
Iterator<Entry<Integer, Integer>> it=hm.entrySet().iterator();
int pre=0;
int max=arr[0];
while(it.hasNext()) {
Entry<Integer, Integer> en=it.next();
int key=en.getKey();
int val=en.getValue();
if(val>pre){
pre=val;
max=key;
}
}
//System.out.println(max);
}</pre>
<p> </p>
<p>用Hash的方式写的,为什么测试的时候速度上反而是最慢的</p>
12 楼
mr_kairy
2010-10-06
早上刚写的一个。。。贴出来大家评下哈....
效率也不算很高,也就是选择排序的那个效率了。。
结果输出:2 , 7
效率也不算很高,也就是选择排序的那个效率了。。
/** * 思路: 依次选择比较。。记录每个数比较过后重复的个数 记录在变量里面.. * 然后比较当前 这个数 重复的次数 是否 大于上一次重复的个数。。 * */ int arr[] ={1,2,5,5,6,6,9,5,3,3,4,4,4,4,5,2,2,2,2,2,7,7,7,7,7,7}; int tempCount = 0; //记录上个一个数 重复的个数 int reNumber[] = new int[50]; //重复需要打印的数 //双循环 知道重复的个数... for(int i=0;i<arr.length -1 ; i++){ int nowCount = 0 ; //当前这个数 重复的个数 for (int j = i+1; j < arr.length; j++) { //判断当前循环的数 是否有重复的 if(arr[i] == arr[j]){ nowCount++; } } //判断 当前 重复的数 是否 多于上一次重复的数 if(nowCount > tempCount){ tempCount = nowCount; reNumber = new int[50]; //设置50个大小 装重复的数 } //如果有相同个数 重复的数 if(nowCount == tempCount){ for (int j = 0; j < reNumber.length; j++) { if(reNumber[j] == 0){ reNumber[j] = arr[i]; break; } } } } //打印 for (int i = 0; i < reNumber.length; i++) { if(reNumber[i] == 0){ break; }else{ System.out.println(reNumber[i]); } }
结果输出:2 , 7
11 楼
leves
2010-10-06
icanfly 写道
codeparser 写道
terencewong 写道
you can consider hash. Key will be the value of the array element, and the duplicate time will be the value. The complexity will be O(n). Maybe you can do more research to make it in O(lgN).
应该是这个思路,因为它只要求记录最多的那个元素,可以在hash的时候,顺便记录下当前重复次数最多的元素。
有种情况是重复次数相同的时候,也需要记录下来,这样只需要扫描一遍数组就可以了。
有两个值有可能hash值一样,还得做一下判断!
在读的时候通过Hash的方式存,但读的时候呢?不是还需要循环比较 value的大小?
发表评论
-
计算机网络试卷
2011-01-03 00:03 2179计算机网络试卷参考 ... -
java虚拟机学习笔记之垃圾收集(下)
2010-12-12 17:45 737★引用计数收集器 这种方法中,堆中每个对象都有一个引用计 ... -
java虚拟机学习笔记之垃圾收集(上)
2010-12-12 17:44 791java程序是运行在java虚拟机当中的,在java虚拟机 ... -
Java中应用的的设计模式 - 行为模式
2010-11-28 18:21 995Behavioral patterns Chain o ... -
Java中应用的的设计模式 - 结构模式
2010-11-28 18:20 904Structural patterns Adapter ... -
Java中应用的的设计模式 - 创建模式
2010-11-28 18:15 767Creational patterns Abst ... -
commons-dbutils
2010-10-31 16:52 1052AbstractKeyedHandler< ... -
Java7新特性之增强的异常处理功能
2010-05-19 14:01 879此次变动增加了两处对异常处理机制的细微增强: ... -
Java中各类Cache机制实现解决方案
2010-04-26 19:13 683在Java中,不同的类都有自己单独的Cache机制,实现的方法 ... -
Java7 - 新特性之对集合类的语言支持
2010-04-25 19:51 1915Java将对创建集合类提供第一类语言支持,也就是对集合类的操作 ... -
各类数值型数据间的混合运算
2010-04-21 14:55 888自动类型转换 整型、实型、字符型数据可以混合运算。运算中,不 ... -
Javaclass文件结构
2010-04-21 14:54 861Magic:该 项存放了一个 Java 类文件的魔数(magi ... -
Java核心API需要掌握的程度
2010-04-21 14:45 770Java的核心API是非常庞大的,这给开发者来说带来了很大的方 ... -
Java偏向锁实现原理(BiasedLocking)
2010-04-21 14:44 1150轻量级锁也是一种多线程优化,它与偏向锁的区别在于,轻量级锁是通 ... -
java 反射机制
2008-10-01 14:33 821Java提供了一套机制 ... -
Java安装后JDK/bin目录下的众多exe文件的用途
2008-10-27 08:26 1118Java安装后JDK/bin目录下的众多exe文件 ... -
Java栈与堆 (精通java者必懂概念)
2008-11-24 10:31 7381. 栈(stack)与堆(heap)都是Java用来在Ram ...
相关推荐
今天跟大家分享一道阿里的算法面试题。 题目描述 给定一个正整数nnn,把它拆分为若干个数的和,记这若干个数的积为MMM,求MMM的最大值。 题目分析 这道题正常的思路是使用动态规划算法。 假设 dp[n]dp[n]dp[n] 为正...
这本书不仅提供了解题思路,还对每一道题目的不同解法进行了详尽的解析,有的题目甚至给出了多种解法,帮助读者开阔思维,理解算法的多样性。通过这些内容的学习,读者能够提升解决实际问题的能力,增加面试成功的...
5. 实战经验:分享阿里巴巴内部项目中的算法应用,以及面试过程中可能遇到的问题。 三、代码示例 配套的代码示例通常会以Python、Java、C++等主流编程语言编写,每个例子都会对应一个或多个LeetCode题目,旨在帮助...
【阿里技术面试题解析】 ...以上是阿里集团不同职位的面试题解析,涉及了并发编程、网络编程、系统设计、数据结构、算法等多个领域的知识点。这些题目展示了阿里集团对于技术人才全面而深入的技术要求。
总结起来,本文介绍了进程创建的基本概念,特别是`fork()`函数的工作方式,以及正则表达式的使用和匹配规则,同时涉及了一道逻辑推理题。对于研发面试来说,这些知识点涵盖了操作系统、编程基础和逻辑思维能力,都是...
这份资料涵盖了百度、腾讯、阿里、华为、京东、美团、拼多多、携程、蚂蚁金服、唯品会、字节跳动、阿里云和哔哩哔哩(B站)等多家知名企业的面试题目。 首先,我们要明白这些大厂在面试时通常关注哪些方面: 1. ...
阿里巴巴面试题leetcode CharSimpleAlgorithm 字符串算法 WordConversion 该类是用于改变字母的大小写,使一...ps:该类的实际意义没有想到,是我在浏览LeetCode评论区的时候看到的一道阿里巴巴面试题,所以就实现了一下
5. 理解并认同阿里巴巴的企业文化,能够在面试中体现出自身价值观与企业文化的契合。 总之,要想在阿里巴巴的笔试中脱颖而出,就必须以全面的知识储备和充分的练习作为基础。无论对于在校学生还是社会人士,这都是...
这些面试题展示了面试者需要掌握的关键技能,包括但不限于算法分析、数据结构的应用、问题解决能力以及对基础理论的深入理解。在实际工作中,这些知识对于优化代码性能、解决复杂问题以及进行系统设计都至关重要。
《面试算法练习等级攻略》- LeetCode 题解与《剑指Offer》题解 Java 版本 在准备IT行业的面试,特别是算法相关的职位时,LeetCode 和《剑指Offer》是两个不可或缺的资源。这份压缩包包含了这两个平台上的算法问题的...
3. **算法题解答**:技术面试环节通常会有一道算法题,需在规定时间内完成。 - 建议策略:先快速理解题目要求,再构思解题思路,最后编码实现。 4. **沟通技巧**: - 在面试过程中保持自信,即使遇到不懂的问题也...
在职业发展的道路上,技术研发岗位的笔面试无疑是一道难关。对于许多技术研发者来说,能否在激烈的竞争中脱颖而出,往往取决于个人在笔面试中的表现。今天,我们分享的是一篇关于阿里巴巴Java研发岗位笔面试成功经验...
- 第19题:这是一道关于组合计数的问题,询问的是在一定条件下不同颜色球的组合数。 4. **系统负载与性能监控**: - 第22题:题目涉及系统负载的概念,指出了一分钟、五分钟和十五分钟的平均负载,负载越低说明...
3. **实战演练**:面试中可能会给出一道算法题供现场解答,通常时间为20分钟左右。 - **建议**:提前熟悉常见的数据结构与算法,提高解决问题的能力。 #### 六、综合建议 1. **技术积累**:不断学习新知识,提高...
面试中,面试官通常会出一些算法题目,如排序、查找、图论、动态规划等。对于数据结构,链表、队列、栈、树、哈希表等的理解及其应用是考察的重点。熟练掌握这些基本功,能帮助你在解决问题时快速找到最优解。 六、...
本资源精心收录了多家知名企业(包括奇安信、贝壳找房、小米、游卡、vivo、阿里巴巴、爱奇艺、百度、猿辅导、中兴等)的C++方向笔试题,覆盖从2020年至2022年的秋招和校招题目。这些题目不仅考察了C++的基础知识,如...
11. **面试经验**:除了笔试,如阿里巴巴的校园招聘试卷,也可能包含面试技巧和常见面试问题的讨论。 准备这些笔试的关键在于广泛学习和深入理解计算机科学的基本原理,同时保持对新技术的关注和实践。通过模拟题和...
- 谷歌等公司在面试时可能会考察系统设计能力和算法题解答能力。 3. **公司选择**: - 实习机会能够增加内部转正的可能性,因此选择一家理想的公司实习至关重要。 - 创业公司和大型企业各有优势,可根据个人职业...
第一篇 面试题 ................................................................................ 8 1.1. 简介 ................................................................................................