代码随想录第五天 | LeetCode1.两数之和 + LeetCode202 快乐数 + LeetCode242.有效的字母异位词 + LeetCode349.两个数组的交集

LeetCode1.两数之和

大家可能看到这是LeetCode1,可能觉得很简单,但是如果你没有了解过哈希这种结构,第一个题其实并不简单。

首先哈希表一般有三种实现方式,分别是 Java中的

  1. 数组 array
  2. Set
  3. Map

那么本题我们就使用到 Map 的实现哈希表的方式去实现。

代码如下:

    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<>();
        //遍历nums
        for (int i = 0; i < nums.length; i++) {
            //确定目标值
            int temp = target - nums[i];

            //寻找map中是否有符合条件的key
            if (map.containsKey(temp)) {
                result[1] = i;
                result[0] = map.get(temp);
                break;
            }
            //如果没有找到,就将当前的数组下标和数组下标对应的值加入到map中
            map.put(nums[i], i);
        }

        return result;
    }

LeetCode202.快乐数

本题的关键还是利用哈希表的特性,快速找出一个元素是否出现在集合中

代码如下:

    public boolean isHappy(int n) {
        Set<Integer> record = new HashSet<>();
        //终止循环的条件
        //如果n = 1表示是快乐数,
        //如果n = 他自己本身,说明会进入无限循环状态,说明不是快乐数
        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 /= 10;
        }
        return res;
    }

LeetCode242.有效的字母异位词

本题利用数组实现哈希表。

代码如下:

 public boolean isAnagram(String s, String t) {
        //因为字符串都是小写字母,所以数组大小选择 26
        int[] record = new int[26];

        //遍历字符串s
        for (int i = 0; i < s.length(); i++) {
            record[s.charAt(i) - 'a']++;
        }

        //遍历字符串t
        for (int i = 0; i < t.length(); i++) {
            record[t.charAt(i) - 'a']--;
        }

        for (int i = 0; i < record.length; i++) {
             record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。
            if (record[i] != 0) {
                return false;
            }
        }
        // record数组所有元素都为零0,说明字符串s和t是字母异位词
        return true;
    }

LeetCode349.两个数组的交集

本题则利用了 set 实现哈希表。

代码如下:

    public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {
            return new int[0];
        }

        //定义两个哈希表
        Set<Integer> nums1Set = new HashSet<>();
        Set<Integer> resultSet = new HashSet<>();

        for (int i : nums1) {
            nums1Set.add(i);
        }

        for (int i : nums2) {
            if (nums1Set.contains(i)) {
                resultSet.add(i);
            }
        }

        return resultSet.stream().mapToInt(x -> x).toArray();
    }

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值