文末
我将这三次阿里面试的题目全部分专题整理出来,并附带上详细的答案解析,生成了一份PDF文档
- 第一个要分享给大家的就是算法和数据结构
- 第二个就是数据库的高频知识点与性能优化
- 第三个则是并发编程(72个知识点学习)
- 最后一个是各大JAVA架构专题的面试点+解析+我的一些学习的书籍资料
还有更多的Redis、MySQL、JVM、Kafka、微服务、Spring全家桶等学习笔记这里就不一一列举出来
官方五种方法:https://leetcode-cn.com/problems/majority-element/solution/duo-shu-yuan-su-by-leetcode-solution/
方法一:排序找中值
如果将数组 nums 中的所有元素按照单调递增或单调递减的顺序排序,那么下标为 n/2 的元素(下标从 0 开始)一定是众数。
class Solution {
public int majorityElement(int[] nums) {
Arrays.sort(nums);
int mid = nums.length / 2;
return nums[mid];
}
}
var majorityElement = function(nums) {
nums.sort((a,b) => a-b);
return nums[Math.floor(nums.length/2)];
};
方法二:哈希表
遍历哈希表操作的四种方法:https://blog.csdn.net/kyi_zhu123/article/details/52769469
我们使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。
我们用一个循环遍历数组 nums 并将数组中的每个元素加入哈希映射中。在这之后,我们遍历哈希映射中的所有键值对,返回值最大的键。我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。
class Solution {
public int majorityElement(int[] nums) {
Map<Integer, Integer> counts = countNums(nums);
Map.Entry<Integer, Integer> major = null;
for(Map.Entry<Integer, Integer> entry : counts.entrySet()){
if(major == null || entry.getValue() > major.getValue()){
major = entry;
}
}
return major.getKey();
}
private Map<Integer, Integer> countNums(int[] nums){
Map<Integer, Integer> counts = new HashMap<Integer, Integer>();
for(int num : nums){
if(!counts.containsKey(num)){
counts.put(num, 1);
}else{
counts.put(num, counts.get(num)+1);
}
}
return counts;
}
最后
看完美团、字节、腾讯这三家的面试问题,是不是感觉问的特别多,可能咱们又得开启面试造火箭、工作拧螺丝的模式去准备下一次的面试了。
开篇有提及我可是足足背下了1000道题目,多少还是有点用的呢,我看了下,上面这些问题大部分都能从我背的题里找到的,所以今天给大家分享一下互联网工程师必备的面试1000题。
注意不论是我说的互联网面试1000题,还是后面提及的算法与数据结构、设计模式以及更多的Java学习笔记等,皆可分享给各位朋友
互联网工程师必备的面试1000题
而且从上面三家来看,算法与数据结构是必备不可少的呀,因此我建议大家可以去刷刷这本左程云大佬著作的《程序员代码面试指南 IT名企算法与数据结构题目最优解》,里面近200道真实出现过的经典代码面试题。
ps://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**