刷题日记 Day 5 : 有效的字母异位词、两个数组的交集、快乐数、两数之和

本篇文章 , 是在代码随想录 60 天编程挑战的基础上进行的题目讲解
参与链接在此 : https://programmercarl.com/other/xunlianying.html

大家好 , 这个专栏 , 给大家带来的是 60 天刷题强训 . 最令大家头疼的事就是刷题了 , 题目又臭又长又抽象 , 有的题读都读不懂 , 更别说做了 . 所以 , 这个专栏想要帮助大家摆脱困境 , 横扫饥饿 , 做回自己 . 让大家掌握最常见的面试题 , 面对陌生的题目也不至于无从下手 .
也希望大家监督 , 60 天从 0 到 1 , 咱们一起做大佬 ~
今天是 Day5 , 大家加油~
image.png
专栏链接 : https://blog.csdn.net/m0_53117341/category_12247938.html?spm=1001.2014.3001.5482
昨天的打卡链接 : http://t.csdn.cn/fJ0NQ

一 . Leetcode 242 . 有效的字母异位词

题目链接 : 242. 有效的字母异位词
image.png
这道题是利用哈希思想 , 通过数组模拟实现最典型的一道题
image.png
代码也给大家贴在这里了

class Solution {
    
    
    public boolean isAnagram(String s, String t) {
    
    
        // 1. 创建一个答案数组
        // 存放每个字母出现的次数
        int[] ans = new int[26];

        // 2. 先遍历第一个字符串
        // 将该字母的ASCII对应的数组下标++
        for(int i = 0;i < s.length();i++) {
    
    
            ans[s.charAt(i) - 'a']++;
        }

        // 3. 再遍历第二个字符串
        // 将该字母的ASCII对应的数组下标--
        for(int i = 0;i < t.length();i++) {
    
    
            ans[t.charAt(i) - 'a']--;
        }

        // 4. 遍历 ans 数组,如果数组中有元素不为空,那就代表两个字符串有不一样的地方
        for(int i = 0;i < 26;i++) {
    
    
            if(ans[i] != 0) {
    
    
                return false;
            }
        }

        // 5. ans 数组遍历完了,都是0的话,那就是两个字符串是字母异位词
        return true;
    }
}

二 . Leetcode 349 . 两个数组的交集

题目链接 : 349. 两个数组的交集
image.png
这道题 , 同样可以使用上一道题中数组的思想
但是我们这次使用 Set 来实现

Set 一般针对于数据量大或者数据非常分散的情况

image.png

class Solution {
    
    
    public int[] intersection(int[] nums1, int[] nums2) {
    
    
        // 1. 创建两个 哈希Set
        Set<Integer> set1 = new HashSet<>();// 保存 nums1 去重结果
        Set<Integer> set2 = new HashSet<>();// 保存 nums1、nums2 重复元素

        // 2. 先遍历 nums1 ,将 nums1 元素去重保存到 HashSet 中
        for(int i = 0;i < nums1.length;i++) {
    
    
            set1.add(nums1[i]);
        }

        // 3. 拿着 nums2 每个元素去 set1 里面找
        // 如果存在,那就是有共同元素,加入到 set2 中
        for(int i = 0;i < nums2.length;i++) {
    
    
            if(set1.contains(nums2[i])) {
    
    
                set2.add(nums2[i]);
            }
        }

        // 4. 创建一个答案数组(题目要求返回数组)
        int[] ans = new int[set2.size()];
        int k = 0;// 操作数组的下标

        // 将 set2 结果挪到数组中
        for(int tmp : set2) {
    
    
            ans[k++] = tmp;
        }

        return ans;
    }
}

三 . Leetcode 202 . 快乐数

题目链接 : 202. 快乐数
image.png

class Solution {
    
    
    // 获取每一位的平方和
    private int getNum(int n) {
    
    
        int sum = 0;
        while(n != 0) {
    
    
            sum += (n % 10) * (n % 10);
            n /= 10;
        }
        return sum;
    }

    public boolean isHappy(int n) {
    
    
        // 1. 创建一个 HashSet,它的作用就是存放我们中间每次的结果
        Set<Integer> set = new HashSet<>();

        // 2. 循环得到每一个中间结果
        // 循环条件:结果不为1 && set 中不包括该元素才能加入到 set 中
        while(n != 1 && !set.contains(n)) {
    
    
            set.add(n);
            // 更新 n 的值
            n = getNum(n);
        }

        // 到最后,如果 n 是 1,就是快乐数
        // 不是1,那就不是快乐数
        return n == 1;
    }
}


四 . Leetcode 1 . 两数之和

题目链接 : 1. 两数之和
image.png
两数之和这道题 , 经常被大家用来调侃~
有的人夜里看海 , 有的人力扣第一题做不出来
其实这个第一题还是有点难度的
那我们来康康
image.png
代码也在这里

class Solution {
    
    
    public int[] twoSum(int[] nums, int target) {
    
    
        // 1. 创建哈希表用来存储遍历过的元素
        // 第一个 Integer 表示当前元素的值
        // 第二个 Integer 表示当前元素对应的下标
        HashMap<Integer,Integer> map = new HashMap<>();

        // 2. 遍历数组元素
        for(int i = 0;i < nums.length;i++) {
    
    
            // 2.1 定义tmp变量, 当前元素+x=target,其中的x就是target
            int tmp = target - nums[i];
            // 2.2 判断哈希表中存不存在 tmp(也就是判断之前遍没遍历过 tmp)
            if(map.containsKey(tmp)) {
    
    
                // 哈希表中存在的话,就返回哈希表中存放的value和当前元素的下标
                return new int[]{
    
    map.get(tmp),i};
            }
            // 2.3 把遍历过的元素加入到哈希表中
            map.put(nums[i],i);
        }

        // 如果到这里还没找到,那就返回 null
        return null;
    }
}

那今天的题目咱们也就完成了~
大家一定要坚持住~
如果对你有帮助的话 , 请一键三连嗷~
image.png

扫描二维码关注公众号,回复: 14603822 查看本文章

猜你喜欢

转载自blog.csdn.net/m0_53117341/article/details/129670166