论坛首页 Java企业应用论坛

一道阿里电话面试中的算法题

浏览 46061 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-10-06  
学习了,在没有看到回复前,我应该会用两个数组去比较,但现在觉得terencewong的方法会更好。
0 请登录后投票
   发表时间: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; 
0 请登录后投票
   发表时间:2010-10-06  
首先要看  数组是不是已经排好序的 

如果是没有排序的   要想想要不要排好序后再去查找

方案一:没有排序的数组 ,用hashMap去存储,key是数组元素,value是出现的次数

方案二:如果是有序数组 , 只记录当前出现次数最多的数组值 , 每次去遍历下一个数组值的时候,直接跳过n个(n就是当前出现次数最多的次数),因为是排好序的, 所以在检测下一个值时,先记录下要检测的这个值,然后向后跳跃n-1个,如果跳跃之后的这个值跟你之前记录下的值比较不想等,就说明跳跃过的这几个值中间不可能出现比当前出现次数最多的值还多,这样算下了  时间复杂度就小于O(n) 
0 请登录后投票
   发表时间:2010-10-06  
只想问一句, 在项目里面会用到吗?
0 请登录后投票
   发表时间:2010-10-06  
楼上的各位有没有想过map.get()方法的时间复杂度?
0 请登录后投票
   发表时间:2010-10-06  
笔试题都犯不着搞这么长的答案。。 用 HashMap 即可。

电话面试主要是看你能不能干活,问点基础而已,至少基本库要知道吧。
0 请登录后投票
   发表时间: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)更好的,这就是个考实现的题。既然是实现,当然要搞清楚环境,哪有闷着头写程序的道理。



说的很有道理...
0 请登录后投票
   发表时间:2010-10-07  
电话考察,那可得有足够编程经验和灵活的编程思想才能应付的了啊!
0 请登录后投票
   发表时间: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() + " 次.");  
   } 
}
0 请登录后投票
   发表时间:2010-10-07  
xjwm 写道
只想问一句, 在项目里面会用到吗?

我倒是感觉笔试面试的题目项目中不会怎么用到,做项目和考试不是一个思路。 所以面试前要多做一些类似的题目,熟悉一下思路
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics