经典java算法--面试题(不断更新)17.9.13

1、查找单链表的中点(O(n)):

使用快慢指针,慢指针一次一格,快指针一次两格;当快指针到终点时,慢指针到达中点

2、数组中次数超过一半的数(O(n)):

链接:https://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163 来源:牛客网 如果有符合条件的数字,则它出现的次数比其他所有数字出现的次数和还要多。 在遍历数组时保存两个值:一是数组中一个数字,一是次数。遍历下一个数字时,若它与之前保存的数字相同,则次数加1,否则次数减1;若次数为0,则保存下一个数字,并将次数置为1

3、10G的IP文件,求访问次数最多的10个IP:

hash将同样的IP放在同一个桶中(可能不同的IP也在同一桶),利用HashMap对每个桶的IP进行统计分析,维护一个最小堆

4、100个范围在0-100的数进行排序:

计数排序的思想是对每一个输入元素x,确定出小于x的元素个数,有了这一信息,就可以把x直接放在它在最终输出数组的位置上,例如,如果有17个元素小于x,则x就是属于第18个输出位置。

5、Two Sum问题:

在hashtable里面,key是差,value是index。比如例子中的[2,7,11,15],target是9。那么在2的时候就存入7 0,下一位找到7的时候,之前有个差值是7,那么就返回7对应的index,0,以及当前这个7的index,就是1


你可能感兴趣的:(经典java算法--面试题(不断更新)17.9.13)