day06 打卡242.有效的字母异位词 349. 两个数组的交集 202. 快乐数

day06 打卡242.有效的字母异位词 349. 两个数组的交集 202. 快乐数

242.有效的字母异位词

242题目链接

1.思路:可以先记住s的每个字符,如果出现就+1;再次循环t的每一个字符,寻找相同的字符对于的数值,实现-1。最后所有的字符的数值等于0,则互为字母异位词。

对于Java中的一些必备方法:

LeetCode中需要用到数据结构的各种方法(Java)

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] record = new int[26];

        for(int i = 0 ; i<s.length() ; i++) {
            record[s.charAt(i) - 'a']++;
        }
        for(int i = 0 ; i<t.length() ; i++) {
            record[t.charAt(i) - 'a']--;
        }
        
        boolean reslut = true;
        for(int i = 0; i<26 ; i++) {
            if (record[i] != 0) {
                reslut = false;
                break;
            }
        }
        return reslut;
    }
}

349. 两个数组的交集

349题目链接

1.主要是通过set添加数值后,通过contains()判断是否存在,如果存在的话就加入set2。再把set转成数组。

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        Set<Integer> set2 = new HashSet<>();

        for(int i = 0; i<nums1.length ; i++) {
            set1.add(nums1[i]);
        }

        for(int i = 0; i<nums2.length ; i++) {
            if (set1.contains(nums2[i])) {
                set2.add(nums2[i]);
            }
        }
        
        // 也可以直接 return set2.stream().mapToInt(x -> x).toArray();

        int[] result = new int[set2.size()];
        int i = 0;
        for(Integer num: set2) {
            result[i] = num;
            i++;
        }
        return result;
    }
}

202. 快乐数

202题目链接

1.没有思路,看代码随想录的。疑问点在于一直不等于1会陷入死循环。看来之后知道了,如果不是快乐数,就会重复。

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

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

1. 两数之和

1题目链接

1.联想哈希表的使用,就会想到key为nums[index],value是index。因为返回值是要下标,所以存储到value里。为什么不用set是因为可能出现[3,3,4]的数组,index=0和1的都是要被记下来的。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] result = new int[2];
        if (nums == null || nums.length == 0) {
            return result;
        }
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0 ; i<nums.length ; i++) {
            Integer num = target - nums[i];
            if (map.containsKey(num)) {
                result[0] = map.get(num);
                result[1] = i;
                break;
            }
            map.put(nums[i], i);
        }
        return result;
    }
}

参考资料

[代码随想录](

posted @ 2023-03-06 17:21  zzzzzzsl  阅读(20)  评论(0)    收藏  举报