剑指offer计划22( 位运算中等)---java

1.1、题目1

剑指 Offer 56 - I. 数组中数字出现的次数

1.2、解法

救命,真不会用位运算,还是用哈希表做吧,位运算过段时间再学习~~~
搞不来,虽然说哈希表时间和内存消耗确实高。。。。。
这里用Entry提出来遍历哈希表。取值放数组。

1.3、代码


class Solution {
    public int[] singleNumbers(int[] nums) {
        int []res = new int[2];
        int j=0;
        HashMap<Integer,Integer> map = new LinkedHashMap();
        for(int i = 0; i < nums.length ; ++i){
            map.put(nums[i],map.getOrDefault(nums[i],0)+1);
        }
        for(Map.Entry<Integer,Integer> entry:map.entrySet() ){
            if(entry.getValue() == 1){
                res[j]=entry.getKey();
                j++;
            }
        }
        return res;
    }
}


2.1、题目2

剑指 Offer 56 - II. 数组中数字出现的次数 II

2.2、解法

用了跟上面那题一样的解法,位运算想学你们就去看题解吧,我懒得copy过来,我也不太懂

2.3、代码


class Solution {
   public int singleNumber(int[] nums) {
        Map<Integer, Integer> map = new HashMap();

        for(int i = nums.length - 1; i >= 0; --i){
            int key = nums[i];
            map.put(key, map.getOrDefault(key, 0) + 1);
        }

        for(Map.Entry<Integer, Integer> entry: map.entrySet()){
            if(entry.getValue() == 1){
                return entry.getKey();
            }
        }

        return -1;
    }
        
}


posted @ 2021-09-22 09:14  程序员khaos  阅读(24)  评论(0编辑  收藏  举报