力扣热题100(方便自己复习,自用)

力扣热题100

1. 两数之和 - 力扣(LeetCode)

  • 查找两数之和是不是等于target
  • 也就是我们找到一个数之后,用target将其减掉,再寻找应当对应的元素是什么
  • 每找到一个数,我们就将其放在集合中,因为集合中可以去重,保证我们只遍历过一次,然后再继续遍历数组,将target减去当前的数组中的值,看看已经遍历过的数组中是不是有该值,有的话就加入返回结果。
  • 没有的话就将其加入。

思想:用集合存放遍历过的数值,然后根据当前定位到的数值,判断自己寻找的数值在集合中是否出现,若出现就返回结果。

Java 复制代码
class Solution {
    public int[] twoSum(int[] nums, int target) {
        int[] res = new int[2];
        Map<Integer,Integer> map = new HashMap<>();
        if(nums.length == 0 || nums == null){
            return res;
        }
        for(int i = 0;i < nums.length;i++){
            int temp = target - nums[i];
            if(map.containsKey(temp)){
                res[0] = map.get(temp);
                res[1] = i;
            }else{
                map.put(nums[i],i);
            }
        }
        return res;
    }
}

49. 字母异位词分组 - 力扣(LeetCode)

思想:如果可以重组后构成一个单词,那么可以把字符串先转换成字符数组,然后对字符数组中的字母进行排序。将排序过后的字符数组转换成字符串,然后再作为键出现。然后把键一样的值添加到该键对应的列表当中即可。如果没有改键,那就创建一个新的链表,并同时把键值对插入进去。

Java 复制代码
class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        Map<String,List<String>> map = new HashMap<>();
        for(String str : strs){
            char[] array = str.toCharArray();
            Arrays.sort(array);
            String key = new String(array);
            List<String> list = map.getOrDefault(key,new ArrayList<>());
            list.add(str);
            map.put(key,list);
        }
        return new ArrayList<List<String>>(map.values());
    }
}

128. 最长连续序列 - 力扣(LeetCode)

思想:遍历该数组,当遍历到的元素,在该集合中有前驱的时候就跳过。也就是说,遍历到的数字必须是该序列中第一个打头的才进行处理和操作。并且要记录是当前数字打头的连续序列更长还是已经记录的旧的更长。

Java 复制代码
class Solution {
    public int longestConsecutive(int[] nums) {
        Set<Integer> sets = new HashSet<>();
        for(int num : nums){
            sets.add(num);
        }
        int maxLong = 0;
        for(int set : sets ){
            int num = set;
            if(!sets.contains(num - 1)){
                int curLong = 1;

                while(sets.contains(num+1)){
                    num++;
                    curLong++;
                }

                maxLong = Math.max(curLong,maxLong);
            }
        }
        return maxLong;
    }
}

283. 移动零 - 力扣(LeetCode)

思想:使用双指针法进行求解,左指针先不动,指向已经处理好的序列的尾部,右指针寻找不为零的时候,如果不为零,就和left指向的元素进行交换。到最后,left之前的数组就都是不为零的,且位置没有被改变。

java 复制代码
class Solution {
    public void moveZeroes(int[] nums) {
        int left = 0, right = 0,len = nums.length;
        while(right < len){
            if(nums[right] != 0){
                int temp = nums[right];
                nums[right] = nums[left];
                nums[left++] = temp;
            }
            right++;
        }
    }
}
相关推荐
FirstFrost --sy1 小时前
数据结构之二叉树
c语言·数据结构·c++·算法·链表·深度优先·广度优先
森焱森1 小时前
垂起固定翼无人机介绍
c语言·单片机·算法·架构·无人机
搂鱼1145142 小时前
(倍增)洛谷 P1613 跑路/P4155 国旗计划
算法
Yingye Zhu(HPXXZYY)2 小时前
Codeforces 2021 C Those Who Are With Us
数据结构·c++·算法
独行soc2 小时前
2025年渗透测试面试题总结-2025年HW(护网面试) 33(题目+回答)
linux·科技·安全·网络安全·面试·职场和发展·护网
无聊的小坏坏3 小时前
三种方法详解最长回文子串问题
c++·算法·回文串
长路 ㅤ   3 小时前
Java后端技术博客汇总文档
分布式·算法·技术分享·编程学习·java后端
秋说3 小时前
【PTA数据结构 | C语言版】两枚硬币
c语言·数据结构·算法
qq_513970444 小时前
力扣 hot100 Day37
算法·leetcode
不見星空4 小时前
leetcode 每日一题 1865. 找出和为指定值的下标对
算法·leetcode