LeetCode题解 10(169,136)多数元素,只出现一次的数字

多数元素(169)

题目
根据题意这道题是让返回该数组中出现次数大于1/2数组长度的数,因此不管怎样解决我们都要遍历1次数组,获取到每个元素出现的次数,因此这就需要我们用到HashMap,我们可以将该元素存储到key中,将出现的次数存储到Value中。这样我们通过遍历HashMap就可以取出符合要求的值

当Map中没有出现过该数时

     // 用HashMap来存储数组中的值 key为值,Value默认为0,每出现1次就+1
     HashMap<Integer,Integer> map = new HashMap<>();
     //遍历数组
        for(int num : nums){
            //如果map中没有出现过,就存进去
         if(!map.containsKey(num)){
             //Value默认为0,每出现1次就+1
             map.put(num,0);
         }

当Map中出现过该数时我们就将他的出现次数+1

 //存在,就把次数+1
   map.put(num,map.get(num)+1);

最后遍历一遍Map中的Key找到Key中Value大于数组长度一半的返回即可

        int half = nums.length / 2;
        //遍历HashMap取出符合要求的值
        for(int key : map.keySet()){
            if(map.get(key)>half){
                return key;
            }
        }
        return -1;

代码解答

class Solution {
    public int majorityElement(int[] nums) {
        // 用HashMap来存储数组中的值 key为值,Value默认为0,每出现1次就+1
     HashMap<Integer,Integer> map = new HashMap<>();
     //遍历数组
        for(int num : nums){
            //如果map中没有出现过,就存进去
         if(!map.containsKey(num)){
             //Value默认为0,每出现1次就+1
             map.put(num,0);
         }
            //存在,就把次数+1
            map.put(num,map.get(num)+1);
     }
        int half = nums.length / 2;
        //遍历HashMap取出符合要求的值
        for(int key : map.keySet()){
            if(map.get(key)>half){
                return key;
            }
        }
        return -1;
    }
}

注意

在存储HashMap时是从0开始存储的,若是从1开始计算,if后面需要加上else

只出现一次的数字(136)

题目
这道题与上面的多数元素类似,也是要求元素出现的次数,这次是只出现1次的,
因此我们一样使用HashMap来进行实现

当Map中没有出现过该数时

     for(int num : nums){
     if(!map.containsKey(num)){
         map.put(num,1);
    }

当Map中出现过该数时我们就将他的出现次数+1

 map.put(num,map.get(num)+1);

找到符合要求的Key

 //遍历HashMap找到符合条件的值
        for(int key : map.keySet()){
            if(map.get(key) == 1){
                return key;
            }
        }
        return -1;

代码解答

class Solution {
    public int singleNumber(int[] nums) {
        HashMap<Integer,Integer> map =  new HashMap<>();
        //遍历数组
        for(int num : nums){
            if(!map.containsKey(num)){
                map.put(num,1);
            }else{
                map.put(num,map.get(num)+1);
            }
        }
        //遍历HashMap找到符合条件的值
        for(int key : map.keySet()){
            if(map.get(key) == 1){
                return key;
            }
        }
        return -1;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲键盘的程序源

你的激励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值