2215. 找出两数组的不同

Untitled

public List<List<Integer>> findDifference(int[] nums1, int[] nums2) {
    HashSet<Integer> set1 = new HashSet<>();
    HashSet<Integer> set2 = new HashSet<>();
    for(int x: nums1) set1.add(x);
    for(int x: nums2) set2.add(x);
    List<List<Integer>> ans = new ArrayList<>();
    ArrayList<Integer> t1 = new ArrayList<>();
    ArrayList<Integer> t2 = new ArrayList<>();
    // 遍历对应的set,求不包含的内容
    for(int x: set1) {
        if(!set2.contains(x)) t1.add(x);
    }
    for(int x: set2) {
        if(!set1.contains(x)) t2.add(x);
    }
    ans.add(t1); ans.add(t2);
    return ans;
}

1207. 独一无二的出现次数

Untitled

public boolean uniqueOccurrences(int[] arr) {
    // 构造hashmap
    HashMap<Integer, Integer> map = new HashMap<>();
    for(int x: arr) {
        map.put(x, map.getOrDefault(x, 0) + 1);
    }
    // 构造次数集合
    Set<Integer> set = new HashSet<>();
    for(int x: map.values()) {
        set.add(x);
    }
    // 判断两者大小是否相等
    return map.keySet().size() == set.size();
}

1657. 确定两个字符串是否接近

Untitled

private HashMap<Character, Integer> getMap(String w) {
    HashMap<Character, Integer> map = new HashMap<>();
    for(char x: w.toCharArray()) {
        map.put(x, map.getOrDefault(x, 0) + 1);
    }
    return map;
}
public boolean closeStrings(String word1, String word2) {
    HashMap<Character, Integer> map1 = getMap(word1);
    HashMap<Character, Integer> map2 = getMap(word2);
    // 深拷贝拷贝字符种类
    Collection<Integer> c2 = map2.values().stream().collect(Collectors.toList());
    Set<Character> k2 = map2.keySet();

    // 判断次数是不是一样
    for(int x: map1.values() ) {
        if(c2.contains(x)) c2.remove(x);
        else return false;
    }
    // 判断字符种类是不是一样
    for(Character x: map1.keySet() ) {
        if(k2.contains(x)) k2.remove(x);
        else return false;
    }
    return true;
}

A. 两数之和(⭐⭐⭐)

Untitled

除了两次for循环之外,我们还可以使用哈希表存储每个数字的位置。但是当我们拿到一个数字时,首先应该判断有没有剩余数字,如果有直接返回。最后在添加进入哈希表中。

这样做的原因是如果target = 6,nums = [1,3],则会出现2 * 3=6的情况。

class Solution {
    HashMap<Integer, Integer> map = new HashMap<>();
    public int[] twoSum(int[] nums, int target) {
        int n = nums.length;
        
        for(int i = 0; i < n; i++) {
            // 1. 先判断当前有没有剩余数字
            int surplus = target - nums[i];
            if(map.containsKey(surplus)) {
                // 2. 如果满足,返回
                return new int[] {map.get(surplus), i};
            }
            // 3. 存储基本位置
            map.put(nums[i], i);
        }
        return new int[] {-1, -1};
    }
}

A. 快乐数(⭐⭐)

Untitled

核心思想:就是使用哈希表进行判断数字是否出现过