zoukankan      html  css  js  c++  java
  • [编程题] 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

  • 相关阅读:
    mysql8搭建innodb_cluster集群
    centos7安装(二进制包)mysql8
    apollo-配置管理中心-安装
    gitlab-源代码仓库
    Gitlab管理用户、组、权限(一)
    Gitlab基本管理(二)
    Gitlab基本管理<一>
    Gitlab在centos7上手工安装
    在kubernetes运行一个容器案例
    在linux通过kubeadm搭建kubernetes群集
  • 原文地址:https://www.cnblogs.com/jiyongjia/p/13382956.html
Copyright © 2011-2022 走看看