电话面试算法题一道:找出数组中重复次数最多的元素并打印
问题不难,看你能给出更优的方案
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);
}
}
分享到:
相关推荐
今天跟大家分享一道阿里的算法面试题。 题目描述 给定一个正整数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. 简介 ................................................................................................