代码随想录算法训练营第六天| 242.有效的字母异位词、349. 两个数组的交集、202. 快乐数、1. 两数之和

有效的字母异位词

242. 有效的字母异位词
当需要判断某个数是否在集合内时,使用哈希方法比较简单,常见的哈希方法主要有数组、set和map,要分情况使用,数组一般用于数据量较小时,比如本题一共只有26个字母,那么只需要创建26大小的数组即可,如果使用map就会增加复杂度。另外set一般用于无序且不重复的情况,map用于需要存储key:value的情况

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] arr = new int[26];
        //toCharArray返回字符串的字符数组
        for (char c : s.toCharArray()) {
            //字符相减得到的是ASCII码的差
            arr[c - 'a']++;
        }
        for (char c : t.toCharArray()) {
            arr[c - 'a']--;
        }
        for (int a : arr) {
            if (a != 0) {
                return false;
            }
        }
        return true;
    }
}

两个数组的交集

349. 两个数组的交集
本题要求结果不重复,用set比较适用,同时又是判断元素是否在集合中,解决这种问题的步骤就是先创建一个set把数据存入,然后再遍历另一个集合判断元素

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set = new HashSet();
        for (int num : nums1) {
            set.add(num);
        }
        Set<Integer> resultSet = new HashSet();
        for (int num : nums2) {
            if (set.contains(num)) {
                resultSet.add(num);
            }
        }
        int[] resultArr = new int[resultSet.size()];
        int j = 0;
        for (int i : resultSet) {
            resultArr[j++] = i;
        }
        return resultArr;
    }
}

快乐数

202. 快乐数
本题主要能想到如果有重复值出现,那么就要返回false,是否有重复值问题就要用到hashset,另外本题有两个难点,一个是快乐数的计算,步骤是先取余再缩小10倍,这样一直循环,另一个是循环条件的判断,当n=1或者set中包含了该元素,循环才会停止

class Solution {
    public boolean isHappy(int n) {
        Set<Integer> set = new HashSet();
        while (n != 1 && !set.contains(n)) {
            set.add(n);
            n = getNum(n);
        }
        return n == 1;
    }
    private int getNum(int n) {
        int sum = 0;
        int tmp;
        while (n != 0) {
            tmp = n % 10;
            sum += tmp * tmp;
            n = n / 10;
        }
        return sum;
    }
}

两数之和

1.两数之和
本题适用hashmap,key存元素,value存下标,每次遍历到元素时,需要先判断,然后再存

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer,Integer> map = new HashMap();
        int[] result = new int[2];
        for (int i=0; i<nums.length; i++) {
            int tmp = target - nums[i];
            if (map.containsKey(tmp)) {
                result[0] = i;
                result[1] = map.get(tmp);
            }
            map.put(nums[i], i);
        }
        return result;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容