• 力扣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;
        }
    }
  • 相关阅读:
    rgba()与opacity的区别
    BFC 和 margin collapse(重叠)
    CSS面试题整理
    HTML面试题整理
    box-sizing 和calc()
    怎样用一个标签制作多边框的按钮?
    github项目配置
    React之JSX
    angularjs指令系统系列课程(5):控制器controller
    angularjs指令系统系列课程(4):作用域Scope
  • 原文地址:https://www.cnblogs.com/zhaojiayu/p/15483634.html
Copyright © 2020-2023  润新知