只出现一次的数字 (HashMap的应用)

题目一:

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

示例 1:

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

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

思路:使用hashMap,

以键值对的方式,记录下每个数字出现的次数,最后遍历map,找到值为1的键,输出即可。

特别注意:map的遍历方式!!!

for(Map.Entry<Integer,Integer> entry : map.entrySet())


class Solution {
    public int singleNumber(int[] nums) {
       Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            if(map.get(nums[i]) == null){
                map.put(nums[i],1);
            } else{
                map.put(nums[i],map.get(nums[i])+1);
            }
        }
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
          if(entry.getValue() == 1){
              return entry.getKey();
          }
      }
    return -1;

    }
}

题目二:

给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。

 示例一:

输入:nums = [1,2,1,3,2,5]
输出:[3,5]
解释:[5, 3] 也是有效的答案。

示例二:

输入:nums = [0,1]
输出:[1,0]

与上个题目大同小异,最后由于要返回的是数组类型,所以先遍历出map里面有多少个元素,再循环遍历每个元素加入到数组中。 

class Solution {
    public int[] singleNumber(int[] nums) {
Map<Integer,Integer> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            if(map.get(nums[i]) == null){
                map.put(nums[i],1);
            } else{
                map.put(nums[i],map.get(nums[i])+1);
            }
        }
     
    int size = 0;
//由于要返回的是数组类型,所以先遍历出map里面有多少个元素
for(Map.Entry<Integer,Integer> entry : map.entrySet()){
          if(entry.getValue() == 1){
              size++;
          }
      }
//往数组中循环加入每一个元素
      int[] ret = new int[size];
      int index = 0;
      for(Map.Entry<Integer,Integer> entry : map.entrySet()){
          if(entry.getValue() == 1){
             ret[index++] = entry.getKey();
          }
      }
      return ret;
 
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值