[编程题] lc [169. 多数元素-双指针和哈希表方法]
Posted jiyongjia
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[编程题] lc [169. 多数元素-双指针和哈希表方法]相关的知识,希望对你有一定的参考价值。
[编程题] lc 169. 多数元素
题目
输入输出
Java代码(方法1:借用哈希表计数)
//方法1:借助哈希
public int majorityElement(int[] nums) {
HashMap<Integer,Integer> map = new HashMap<>();
for(int i=0;i<nums.length;i++){
if(!map.containsKey(nums[i])){
map.put(nums[i],1);
}else{
int count = map.get(nums[i]);
map.put(nums[i],++count);
}
}
输出输出
输出:
Java代码(方法2:双指针)
- 一开始指针i指向index为0处,j指向i后一个元素,如果j指向的元素等于i就j++;当发生不等的时候,计算j-i就是有多少个元素,再判断是否满足大于n/2返回。
- 发生不等的时候就移动i的指针到j指向的那里,把j指向移动到i的后一个,继续进行比较操作
- 当j到达数组最后的元素while退出,退出也要判断是否本次的值需要返回。
代码
//方法2:两指针计数
public int majorityElement(int[] nums) {
//先进行排序操作
Arrays.sort(nums);
//指针
int i=0;
int j=1;
int count=0;
while(j<nums.length){
if(nums[j]==nums[i]){j++;}
else{
//当不等的时候先清算上次的长度
count = j-i;
if(count >nums.length/2) {return nums[i];}
//重新标记i j
i = j;
j=i+1;
}
}
//退出while的时候,j到头了但是也要验证本次是否需要返回
count = j-i;
return count>nums.length/2?nums[i] : -1;
}
输出:
以上是关于[编程题] lc [169. 多数元素-双指针和哈希表方法]的主要内容,如果未能解决你的问题,请参考以下文章
[E摩尔投票] lc169. 多数元素(多数投票算法+经典)