力扣202题、349题、1题(哈希表)

202、快乐数

基本思想:

题目是中说如果平方和变不到1的话可能会无限循环

说明求和过程中,和 会重复出现

判断一个元素是否出现在集合里的时候,就要考虑哈希表

具体实现:

只要record重复出现一次就退出循环,得出不是快乐数的结论

要会分解一个数

代码:

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> record = new HashSet<>();
        while (n != 1 && !record.contains(n)) {
            record.add(n);
            n = getNextNumber(n);
        }
        return n == 1;
    }

    private int getNextNumber(int n) {
        int res = 0;
        while (n > 0) {
            int temp = n % 10;
            res += temp * temp;
            n = n / 10;
        }
        return res;
    }
}

 349、两个数组的交集

基本思想:

HashSet

具体实现:

输出每一个元素一定是唯一的,也就是说输出的结果去重,可以不考虑输出结果的顺序

所以要使用HashSet

代码:

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0){
            return new int[0];
        }
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> resSet = new HashSet<>();
        for (int i : nums1){
            set1.add(i);
        }
        for (int i : nums2){
            if (set1.contains(i)){
                resSet.add(i);
            }
        }
        int[] resArr = new int[resSet.size()];
        int index = 0;
        for (int i : resSet){
            resArr[index++] = i;
        }
        return resArr;
    }
}

1、两数之和

基本思想:

HashMap

具体实现:

nums = [2,7,11,15]

下标:   0,1, 2, 3          target =9

定义一个HashMap,map<数值,下标>

循环遍历数组:

i = 0时,9-nums[0] = 7,寻找target - nums[i]是否在map中

7不在map中,所以把nums[0]和下标0放入map中

i = 1时,9-nums[1] = 2,寻找target - nums[i]是否在map中

2在map中,所以得到2和7的下标0和1

 代码:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        if(nums == null || nums.length == 0){
            return res;
        }
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            int temp = target - nums[i];
            if(map.containsKey(temp)){
                res[1] = i;
                res[0] = map.get(temp);
            }
            map.put(nums[i],i);
        }
        return res;
    }
}
原文地址:https://www.cnblogs.com/zhaojiayu/p/15483634.html