[编程题] 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. 多数元素(多数投票算法+经典)

[编程题] lc [287寻找数组中重复数

[M前缀和] lc930. 和相同的二元子数组(滑动窗口+双指针+哈希优化)

# LeetCode第169题—多元数组

# LeetCode第169题—多元数组

# LeetCode第169题—多元数组