137. 只出现一次的数字 II

题目:
给你一个整数数组 nums ,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。

示例 1:
输入:nums = [2,2,3,2]
输出:3

示例 2:
输入:nums = [0,1,0,1,0,1,99]
输出:99

提示:
1 <= nums.length <= 3 * 104
-231 <= nums[i] <= 231 - 1
nums 中,除某个元素仅出现 一次 外,其余每个元素都恰出现 三次

解题之前补充hashMap用法:(哈希表)

1.创建HashMap对象

     HashMap<String,Integer> hashMap = new HashMap<>();

2.添加键值对
添加元素时,如果key已经存在,则返回旧value,并将新的value存到该key中;如果key不存在,则返回null

    hashMap.put("aa",1);
    hashMap.put("bb",2);
    hashMap.put("cc",3);

3.删除元素

如果之前对相同key多次put,则可以移除key对应的旧value,而最新的value不受影响。(×)

remove(key):删除成功(存在key),返回被删除的key对应的value,否则返回null。

remove(key,value):删除成功(存在entry),返回true,否则返回false。

    hashMap.remove("bb");
    hashMap.remove("aa",5);

4.获取元素

对于获取元素,有get(key)getOrDefault(key,defaultValue)(1.8之后)两种方法.

    hashMap.get("cc")
    getOrDefault("aa",-1)//key=aa不存在,所以返回默认value -1

5.元素遍历
第一种:

        Iterator iterator = hashMap.keySet().iterator();
        while (iterator.hasNext()){
            String key = (String)iterator.next();
            System.out.println(key+"="+hashMap.get(key));
        }

第二种:

Iterator iterator1 = hashMap.entrySet().iterator();
        while (iterator1.hasNext()){
            Map.Entry entry = (Map.Entry) iterator1.next();
            String key = (String) entry.getKey();
            Integer value = (Integer) entry.getValue();
            System.out.println(key+"="+value);
        }

第三种:

  for(int i:map.keySet()){
            if(map.get(i)==1){
                return i;
            }
        }

6.判断key或者value是否存在。

    hashMap.containsKey("aa");
    hashMap.containsValue(1);

最终代码:

class Solution {
    public int singleNumber(int[] nums) {
        Map<Integer,Integer> map=new HashMap<>();
        for(int num:nums){
            map.put(num,map.getOrDefault(num,0)+1);
        }

        for(int i:map.keySet()){
            if(map.get(i)==1){
                return i;
            }
        }
        return 0;
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

柯小帅

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值