首页 > 其他分享 >LeetCodeHot100 1.两数之和 46.字母异位词分组 128.最长连续序列

LeetCodeHot100 1.两数之和 46.字母异位词分组 128.最长连续序列

时间:2024-03-07 17:15:59浏览次数:24  
标签:map set nums 46 LeetCodeHot100 ArrayList int new 两数

1.两数之和
https://leetcode.cn/problems/two-sum/description/?envType=study-plan-v2&envId=top-100-liked

public int[] twoSum(int[] nums, int target) {
        HashMap<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            if(map.containsKey(target - nums[i]) && map.get(target - nums[i]) != i){
                return new int[]{i,map.get(target - nums[i])};
            }else{
                map.put(nums[i],i);
            }
        }
        return new int[2];
    }

总结:hashmap的一大优势就是存取数据时间O(1),所以使用了hashmap,使用hashmap要注意的就是key和value的选取,具体问题具体分析。这道题能一次循环就搞定的原因在于输出只要求值,不要求顺序,也就是[1,2]和[2,1]都是正确答案
46.字母异位词分组
https://leetcode.cn/problems/group-anagrams/description/?envType=study-plan-v2&envId=top-100-liked

public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<>();
        for (String str : strs) {
            char[] chars = str.toCharArray();
            Arrays.sort(chars);
            String s = Arrays.toString(chars);
            List<String> temp_list = map.getOrDefault(s,new ArrayList<String>());
            temp_list.add(str);
            map.put(s,temp_list);
        }
        return new ArrayList<>(map.values());
    }

总结:这道题的hashmap是把字符串排序后的结果当key,排序后相同的字符串的list当value,很巧妙,而且这道题中注意 map.values()方法返回的是一个Collection<里面是很多value>,这个Conllection不能直接强转为List 下面的代码是错的
ArrayList<List<String>> values = (ArrayList<List<String>>) map.values(); 那么map.values就不能转为List了吗 答案藏在ArrayList的构造方法中 有一个构造方法可以直接把Collection转成ArrayList(ps: LinkedList中一样)

128.最长连续序列
https://leetcode.cn/problems/longest-consecutive-sequence/description/?envType=study-plan-v2&envId=top-100-liked

public int longestConsecutive(int[] nums) {
        Set<Integer> set = new HashSet<Integer>();
        for (int num : nums) {
            set.add(num);
        }
        int len = 0;
        for (Integer num : set) {
            if (set.contains(num - 1)) continue;
            int currentLen = 1;
            while (set.contains(num + 1)){
                num++;
                currentLen++;
            }
            len = Math.max(len,currentLen);
        }
        return len;
    }

总结:在set中添加所有的数字,本题中核心的思想在于:不需要每个数字都从自己判断到top上限,如果set中存在当前数字-1的数字,就把任务交给当前数字-1那个数字的时候再处理

标签:map,set,nums,46,LeetCodeHot100,ArrayList,int,new,两数
From: https://www.cnblogs.com/jeasonGo/p/18059288

相关文章

  • 代码随想录算法训练营第三十八天| ● 理论基础 ● 509. 斐波那契数 ● 70. 爬楼梯
    理论基础 代码随想录(programmercarl.com)动态规划的五部曲:确定dp数组(dptable)以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组斐波那契数 题目链接:509.斐波那契数-力扣(LeetCode)思路:还好。classSolution{public:intfib(intn)......
  • 代码随想录算法训练营第三十八天 | 746. 使用最小花费爬楼梯,、70. 爬楼梯,509. 斐波那
     509.斐波那契数 已解答简单 相关标签相关企业 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>......
  • 「杂题乱刷」CF1846E1 & CF1846E2
    E1链接一眼题。直接预处理即可。时间复杂度\(O(n\log_2(n))\)。难度1。代码:点击查看代码/*Tips:你数组开小了吗?你MLE了吗?你觉得是贪心,是不是该想想dp?一个小时没调出来,是不是该考虑换题?*/#include<bits/stdc++.h>usingnamespacestd;#definemapunordered_m......
  • p4632-solution
    P4632Solutionlink对时间扫描线,就变成支持单点加入删除一个颜色点,求所有颜色距离某个点的距离最大值。考虑二分答案,现在就是要检验\([x-mid,x+mid]\)内是否有\(1\simk\)颜色的点各至少一个。数颜色可以考虑维护\(pre_i\)表示上一个与该点同色的位置。然后区间\([l,r]......
  • 246. 区间最大公约数
    #include<cstdio>#include<cstring>#include<iostream>#include<algorithm>usingnamespacestd;typedeflonglongLL;constintN=500010;intn,m;LLw[N];structNode{intl,r;LLsum,d;}tr[N*4];LLgcd(LL......
  • P2946 [USACO09MAR] Cow Frisbee Team S
    原题链接题解设\(sum\)为总能力则若\(sum\)是\(F\)的倍数\(\to\)\(sum\mod\F=0\)根据加法求模的特性,我们可以设\(dp[i][j]\)为加上第\(i\)个元素后,模为\(j\)的方案数转移方程移得注意一个细节:按照遍历顺序,每个元素要么不是一套方案的第一个元素,要么是所......
  • Living-Dream 系列笔记 第46期
    强连通分量(StronglyConnectedComponents,SCC)。强连通:有向图中,\(x,y\)能相互到达。弱连通:有向图中,\(x\)能到\(y\),\(y\)不能到\(x\)(或反之)。强连通分量:有向图\(G\)中一极大子图\(G1\),使得\(G1\)任意两点均强连通,且\(G1\)不可变得更大(不能添加点)。强连通分量要么是......
  • SP14846 GCJ1C09C - Bribe the Prisoners 题解
    非常好区间dp。我们发现直接依题做是困难的,因此考虑反着做。也即,假定起初那\(Q\)个牢房均为空,现在要将给定的\(Q\)的犯人插入其中,求最小代价。然后我们发现这题和P1775很像,相当于每插入一个人,两段不相邻的牢房就被合并到了一起。接着我们就考虑这玩意怎么做区间dp。......
  • P4690 [Ynoi2016] 镜中的昆虫 题解
    题目链接:镜中的昆虫经典题了,我们首先回顾下颜色数的常见做法统计:对每个位置维护一个\(pre_i\),表示与当前位置相同的颜色上一次出现位置。那么我们分讨一下。查询\([l,r]\)得到颜色数,对于\(pre_i<l\)的\(i\)点,显然它就是这个区间内\(a_i\)对应颜色出现的第一个位置,我们......
  • Codeforces 1446D1 Frequency Problem (Easy Version)
    考虑求出全局的众数\(A\)。那么有一个结论,就是答案区间的众数中绝对有\(A\)。考虑反证法,如果没有\(A\),\(A\)在序列中出现的个数一定\(\ge\)区间内众数的出现个数,所以可以一直往外扩展直到\(A\)出现的个数与区间内非\(A\)众数的个数持平,这样肯定更优。于是可以考虑钦......