首页 > 其他分享 >[刷题记录Day6]Leetcode哈希表

[刷题记录Day6]Leetcode哈希表

时间:2023-08-25 22:35:21浏览次数:48  
标签:return Day6 nums1 int result 哈希 new Leetcode nums2

No.1

题目

有效的字母异位词

思路

  • 每个字符频率都相同,于是把字母表映射到长度为26的数组上

代码

public boolean isAnagram(String s, String t) {  
    int lenS = s.length(), lenT = t.length();  
    if (lenT != lenS) return false;  
    int[] alphabet = new int[26]; // 26个字母 
    for (int i = 0; i < lenS; i++) {  
        char item = s.charAt(i);  
        alphabet[item - 'a'] += 1;  
    }  
    for (int i = 0; i < lenT; i++) {  
        char item = t.charAt(i);  
        alphabet[item - 'a'] -= 1;  
    }  
    for (int i = 0; i < 26; i++) {  
        if (alphabet[i] != 0) return false;  
    }  
    return true;  
}

No.2

题目

两个数组的交集

思路

代码

public int[] intersection(int[] nums1, int[] nums2) {  
    if (nums1 == null || nums1.length == 0 || nums2 == null || nums2.length == 0) {  
        return new int[0];  
    }  
    Set<Integer> set = new HashSet<>();  
    Set<Integer> resSet = new HashSet<>();  
    // iterate nums1  
    for (int i : nums1) {  
        set.add(i);  
    }  
    // iterate nums2 & check if exists  
    for (int i : nums2) {  
        if (set.contains(i))  
            resSet.add(i);  
    }  
    // turn into int[]  
    return resSet.stream().mapToInt(x -> x).toArray();  
}

No.3

题目

快乐数

思路

  • 用一个set来记录出现过的数字,一旦重复就说明不是快乐数
  • 用一个方法获取各位数字和

代码

public boolean isHappy(int n) {  
    Set<Integer> sumHash = new HashSet<>();  
  
    while (n != 1) {  
        n = getSumForEachDigit(n);  
        if (sumHash.contains(n))  
            return false;  
        else            sumHash.add(n);  
    }  
  
    return true;  
}  
  
public static int getSumForEachDigit(int n) {  
    int sum = 0;  
    while (n >= 10) {  
        sum += (n % 10) * (n % 10);  
        n /= 10;  
    }  
    sum += n * n;  
    return sum;  
}

No.4

题目

两数之和

思路

  • map记录访问过的数,以数为key,下标为value,每访问一个新的数,就在map中寻找target-当前数这个key是否存在

代码

public int[] twoSum(int[] nums, int target) {  
    Map<Integer, Integer> hashMap = new HashMap<>();  
    int[] result = new int[2];  
    for (int i = 0; i < nums.length; i++) {  
        int match = target - nums[i];  
        // 找到匹配  
        if (hashMap.containsKey(match)) {  
            result[0] = i;  
            result[1] = hashMap.get(match);  
            return result;  
        } else { // 找不到,记录key value  
            hashMap.put(nums[i], i);  
        }  
    }  
    return result;  
}

标签:return,Day6,nums1,int,result,哈希,new,Leetcode,nums2
From: https://www.cnblogs.com/tomatoQt/p/17658082.html

相关文章

  • [刷题记录Day7]Leetcode哈希表
    No.1题目四数相加II思路很妙的办法:有四个数组A、B、C、D,用hashMap记录【A、B中数字之和】+【这些和出现的次数】,再遍历C、D中数字组合,寻找【0-C、D中数字之和】在hashMap中出现的次数,并累加本质上,这是把4个数组简化成了2个数组代码publicintfourSumCount(int[]nums1,......
  • VSCode使用JavaScript刷LeetCode配置教程(亲试可以!)
    账号秘密都对,但是缺登录不成功的问题诀窍可能是:在属性设置中把LeetCode版本改成cn。点击LeetCode配置,修改Endpoint配置项,改成leetcode-cn,再次尝试登陆即可。  大家可移步原博文:https://blog.csdn.net/qq_37263248/article/details/124304402......
  • leetcode1260
    这是一道模拟题刚开始准备纯模拟,而后在题解看到一维压缩,才发现其实是将矩阵按行展开后进行k次右移操作。转换成一维后,难点就在转换坐标:行号=idx/列数;列号=idx%列数; ......
  • leetcode236求最近公共祖先
    递归TreeNode*dfs(TreeNode*root,TreeNode*p,TreeNode*q){if(!root)returnroot;//当发现这个节点已经是叶节点时,要告诉上层if(root==p||root==q)returnroot;//当发现是p节点或者q时也要告诉上层TreeNode*left=dfs(root->left,p,q);//左子树是否有p或者q......
  • Leetcode1636——按照频率将数组升序排序
    给你一个整数数组 nums ,请你将数组按照每个值的频率 升序 排序。如果有多个值的频率相同,请你按照数值本身将它们 降序 排序。 请你返回排序后的数组。 示例1:输入:nums=[1,1,2,2,2,3]输出:[3,1,1,2,2,2]解释:'3'频率为1,'1'频率为2,'2'频率为3。示例2:输入:nu......
  • 哈希表 part 1
    相关阅读:https://docs.qq.com/doc/DUEtFSGdreWRuR2p4当遇到了要快速判断一个元素是否出现集合里的时候,就需要考虑哈希法。1.两数之和deftwoSum(self,nums,target):""":typenums:List[int]:typetarget:int:rtype:List[int]......
  • 【LeetCode动态规划#16】矩阵的最小路径和、三角形的最小路径和
    矩阵的最小路径和给定一个包含非负整数的*m*x*n*网格grid,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:一个机器人每次只能向下或者向右移动一步。示例1:输入:grid=[[1,3,1],[1,5,1],[4,2,1]]输出:7解释:因为路径1→3→1→1→1的总和最小。......
  • LeetCode-21. 合并两个有序链表(Java)
    这是我在51CTO博客开启的写作之路,第一次正式写博客记录我在LeetCode的刷题日,希望能帮助更多的小伙伴攻面自己心仪的公司offer。如下对于 LeetCode-21.合并两个有序链表,进行全面解析并小结解题思路,同学们请参考:1.题目描述将两个升序链表合并为一个新的 升序 链表并返回。新链表......
  • LeetCode-24. 两两交换链表中的节点(Golang)
    一、前言作者:bug菌博客:CSDN、掘金、infoQ、51CTO等简介:CSDN/阿里云/华为云/51CTO博客专家,博客之星Top30,掘金年度人气作者Top40,51CTO年度博主Top12,掘金/InfoQ/51CTO等社区优质创作者,全网粉丝合计10w+,硬核微信公众号「猿圈奇妙屋」,免费领取简历模板/学习资料/大厂面试真题/职业规划......
  • [LeetCode][198]house-robber
    ContentYouareaprofessionalrobberplanningtorobhousesalongastreet.Eachhousehasacertainamountofmoneystashed,theonlyconstraintstoppingyoufromrobbingeachofthemisthatadjacenthouseshavesecuritysystemsconnectedanditwilla......