首页 > 其他分享 >代码随想录刷题day 6 | 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

代码随想录刷题day 6 | 哈希表理论基础 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和

时间:2024-07-08 22:30:35浏览次数:17  
标签:map 202 return int 随想录 next new public 两数

242. 有效的字母异位词 383. 赎金信

class Solution {  //这里只给出了242的代码,赎金信的解法可以说是基本相同的
    public boolean isAnagram(String s, String t) {
        int[] map = new int[26];
        for(char c: s.toCharArray())  map[c-'a']++;
        for(char c: t.toCharArray())  map[c-'a']--;
        for(int i: map)   if(i != 0) return false;
        return true;
    }
}

49. 字母异位词分组

这个题主要用来复习HashMap和ArrayList了,这两个里面的主要接口还是很重要很常用的。

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String, List<String>> map = new HashMap<>();
        for(String s : strs){
            String key = getKey(s);
            List arr = map.getOrDefault(key, new ArrayList<String>());
            if(arr.size()==0){
                map.put(key, arr);
            }
            arr.add(s);
        }
        return new ArrayList<List<String>>(map.values());
    }

    public String getKey(String s){
        int[] map = new int[26];
        for(char c: s.toCharArray()){
            map[c-'a']++;
        }
        return Arrays.toString(map);
    }
}

202. 快乐数

Hashmap或者hashset的做法比较简单。今天看到个题解有点意思,使用快慢指针来做,因为一定有循环,所以两者终会相遇,相遇的点是1那就是快乐数,否则不是。

class Solution {  //用hashmap
    public boolean isHappy(int n) {
        HashMap<Integer, Integer> map = new HashMap<>();
        while(n != 1){
            int j = map.getOrDefault(n, 0);
            if(j == 1){return false;}
            map.put(n, 1);
            n = next(n);
        }
        return true;
    }
    public int next(int n){
        int sum = 0;
        while(n != 0){
            int j = n % 10;
            sum += j*j;
            n /= 10;
        }
        return sum;
    }
}
class Solution {  //快慢指针的做法,以后遇到有循环的时候可以考虑使用
    public boolean isHappy(int n) {
        if(n == 1 || next(n) == 1) return true;
        int slow = next(n), fast = next(next(n));
        while(slow != fast){
            slow = next(slow);
            fast = next(next(fast));
        }
        return slow == 1;
    }

    public int next(int n){
        int sum = 0;
        while(n != 0){
            int j = n % 10;
            sum += j*j;
            n /= 10;
        }
        return sum;
    }
}

349. 两个数组的交集

主要学的就是hashset的用法

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

        for(int i : nums1) set1.add(i);
        int j = 0;
        for(int num : nums2) {
            if(set1.contains(num)) set2.add(num);
        }
        int[] ans = new int[set2.size()];
        for(int num : set2){
            ans[j++] = num;
        }
        return ans;
    }
}

1. 两数之和](https://leetcode.cn/problems/linked-list-cycle-ii/)

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int i = 0; i < nums.length; i++){
            int j = map.getOrDefault(target - nums[i], -1);
            if(j != -1) { return new int[]{i, j}; }
            map.put(nums[i], i);
        }
        return new int[]{-1, -1};
    }
}

每天都做点,慢慢也就进步了。不过还是有点畏难情绪,做着做着就偷懒了,慢慢改善吧。

标签:map,202,return,int,随想录,next,new,public,两数
From: https://www.cnblogs.com/12sleep/p/18290804

相关文章

  • 题解(2024.7.8贪心)
    1.Teleporters(HardVersion)题意:有n+2个位置:0~n+1,给定n个数\(a_1\)~\(a_n\),有以下操作:向左/右移动一格,代价为1。传送回0位置或者n+1位置,记你当前的位置为i,则代价为\(a_i\)。每个位置只能发动一次传送。求最大传送次数思路:因为每次传送都会回到0/n+1号点,所以,到......
  • 2024已过半,还没试过在vue3中使用ioc容器吗?
    Vue3已经非常强大和灵活了,为什么还要引入IOC容器呢?IOC容器离不开Class,那么我们就从Class谈起Class的应用场景一提起Class,大家一定会想到这是Vue官方不再推荐的代码范式。其实,更确切的说,Vue官方是不推荐基于Class来定义Vue组件。如图所示:社区确实有几款基于Clas......
  • 2024年7个最佳WooCommerce商城案例
    WooCommerce毫无疑问是最受欢迎的电子商务平台。截至2021年,它的下载量已超过8230万次,运行的网站超过380万个。 就市场份额而言,WooCommerce高达40.9%—比紧随其后的竞争对手Shopify高出近15%。 这些数字说明了WooCommerce的规模有多大,以及无数电子商务品......
  • YOLOv8改进 | 注意力机制| 引入多尺度分支来增强特征表征的注意力机制 【CVPR2021】
    秋招面试专栏推荐:深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转......
  • 9个用于测试自动化的最佳AI测试工具(2024)
    选择一款优质的基于生成式AI人工智能的测试工具能够确保测试过程的准确性和效率,从而加速整个软件测试周期。相反,设计不佳的测试工具可能无法发现错误,并可能存在安全问题。它们可能产生误报或漏报,误导开发与测试团队,导致潜在的软件故障。  1、testRigortestRigor是一个基......
  • 2023首届服务韧性工程(SRE)论坛分会场:数据中心运维的新发展
    2023年12月15日,2023首届服务韧性工程(SRE)论坛在杭州成功举行,大会邀请了来自通信、金融、医疗、制造行业等100余位SRE领域专业人士参加,本次大会特别设立了主题为“数据中心运维的新发展”的分会场,由广通优云和SRE专委会联合出品。邀请来自数据中心领域不同行业的产学研用的专家,就......
  • 代码随想录算法训练营第26天 | 455.分发饼干 53. 最大子序和
    455.分发饼干假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这个孩子......
  • 2024/7/8 笔记
    CF1656Hhttps://www.luogu.com.cn/problem/CF1656H参考DaiRuiChen007的题解:code:usingnamespacestd;#definell__int128_tconstintmaxn=1e3+10;llgcd(lla,llb){ returnb?gcd(b,a%b):a;}constintN=1024,N2=N<<2;structstree{ lltree[N2];......
  • 必经之路-美团2023笔试(codefun2000)
    题目链接必经之路-美团2023笔试(codefun2000)题目内容塔子哥的班主任最近组织了一次户外拓展活动,让班里的同学们一起去爬山。在路上,塔子哥看到了一棵漂亮的树,他对这棵树产生了浓厚的兴趣,开始观察并记录这棵树的一些特征。塔子哥发现这棵树有n个节点,其中有一条边被特......
  • 国开大学2024《电子商务法律与法规(统设课)》
    一、单选题1.2017年8月18日()挂牌成立,这是全国第一家集中审理涉网案件的试点法院。A.北京互联网法院B.广州互联网法院C.杭州互联网法院D.上海互联网法院答案:C2.电子合同是平等主体之间以()的形式达成的,设立、变更、终止民事权利义务关系的协议。A.电子签名B.数......