[编程题] lc [169. 多数元素-双指针和哈希表方法]

[编程题] lc 169. 多数元素

题目

image-20200726231925660

输入输出

image-20200726231948013

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);
            }
        }

输出输出

输出:

image-20200726232033369


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;
         
     }

输出:

image-20200726232421911

猜你喜欢

转载自www.cnblogs.com/jiyongjia/p/13382956.html