【代码随想录算法训练营-第六天】【哈希表】242,349,202,1

242.有效的字母异位词

第一遍

  • 思考
    • 比较简单,用数组就能实现了
java 复制代码
class Solution {
    public boolean isAnagram(String s, String t) {
        int[] checkListi = new int[256];
        int[] checkListj = new int[256];
        for (int i = 0; i < s.length(); i++) {
            char checkChar = s.charAt(i);
            int i_ascii = checkChar - '0';
            checkListi[i_ascii] += 1;
        }
        for (int j = 0; j < t.length(); j++) {
            char checkChar = t.charAt(j);
            int j_ascii = checkChar - '0';
            checkListj[j_ascii] += 1;
        }
        return Arrays.equals(checkListi, checkListj);
    }
}

349. 两个数组的交集

第一遍

  • 思考
    • 题目不难,但重点是掌握和了解set相关的知识,包括list、Hashset、treeset
java 复制代码
class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();
        for (int i : nums1) {
            set1.add(i);
        }
        for (int i : nums2) {
            if (set1.contains(i)) {
                set2.add(i);
            }
        }

        return set2.stream().mapToInt(Integer::intValue).toArray();
    }
}

202. 快乐数

第一遍

  • 思考
    • 题目中说了会 无限循环,那么也就是说求和的过程中,sum会重复出现,这对解题很重要!(这一步如果能想出来,才是真的理解题目的,但是我好像是误打误撞了,只是惯性思维觉得应该用set判断是否有重复出现,没有真正读懂题意)
    • 题目的重点还是看到是否有出现过,要学会使用set
    • 难点:如何取出每一位的数值;这一步想了一下,没有过多思考,答案应该有很简单的方法,就直接看了,自己想了5mins没有很好的办法;
java 复制代码
class Solution {
    public boolean isHappy(int n) {
            Set<Integer> set1 = new HashSet<>();
            boolean flag = true;
            while (flag) {
                n = sum(n);
                if (n == 1) {
                    return flag;
                }
                flag = set1.add(n);
            }

            return flag;
        }

        public int sum(int n) {
            int result = 0;
            while (n > 0) {
                int mod = n % 10;
                result += mod * mod;
                n /= 10;
            }
            return result;
        }
}

1. 两数之和

第一遍

  • 思考
    • 根据建议,先看了题解,了解到了本题应该使用的思路,了解了一下java相关的map的用法,一遍AC了。
    • 下面两张图片我感觉是我理解题目的中重点,大家可以好好品一品
java 复制代码
package HashStructure;

import java.util.*;

public class HashTest {
    public static void main(String[] args) {
        int[] nums1 = {2,7,11,15};
        int target = 9;
        Solution solution = new Solution();
        int[] result = solution.twoSum(nums1, target);
        System.out.println(Arrays.toString(result));
    }

}

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map1 = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int findValue = target - nums[i];
            if (map1.containsKey(findValue)) {
                return new int[]{i, map1.get(findValue)};
            } else {
                map1.put(nums[i], i);
            }
        }
        return new int[]{};
    }
}
相关推荐
凤凰院凶涛QAQ2 小时前
《Java版数据结构 & 集合类剖析》Map & Set & 反射:“从哈希碰撞到红黑树转换,反射帮你扒开 HashMap 的桶数组看个究竟”
java·数据结构·算法
H.莓飛2 小时前
【数据结构】排序_OJ题(一):计数、桶与排序后的处理
java·开发语言·数据结构
w_zero_one4 小时前
算法--模拟
java·数据结构·算法
秋天的怀念_David4 小时前
算法一千零一夜 · 第十三夜 幻方,武侠世界里的数学迷宫
java·程序人生·算法
秋天的怀念_David5 小时前
算法一千零一夜 · 第十四夜 幻方与奇妙的二进制
java·程序人生·算法
薛定e的猫咪5 小时前
(ICLR 2020)MAML 靠的不是快速学习,而是特征复用
人工智能·深度学习·学习·算法·机器学习
薛定e的猫咪5 小时前
(ICLR 2026)DF-META:面向 FJSP 的无导数元学习实例自适应调度
人工智能·深度学习·学习·算法·机器学习
小羊没烦恼!7 小时前
异步编程:线程概述及使用
java·开发语言·mysql·算法·c#
wanderist.7 小时前
202609CSP认证P3
算法
云淡风轻~窗明几净7 小时前
角谷猜想最接近严格证明的测试 Version1.1.1
人工智能·算法·机器学习·图论