当前位置: 首页 > news >正文

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

力扣热题100

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

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

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

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)

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

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)

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

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之前的数组就都是不为零的,且位置没有被改变。

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++;
        }
    }
}

相关文章:

  • 利用ffmpeg库实现音频Opus编解码
  • 车载以太网网络测试-18【传输层-DOIP协议-1】
  • PyTorch模型转ONNX例子
  • 深入探究 JVM 堆的垃圾回收机制(一)— 判活
  • python3 -m http.sever 8080加载不了解决办法
  • 6个常见的Python设计模式及应用场景
  • Python实战:开发经典猜拳游戏(石头剪刀布)
  • MySQL事务全解析:从概念到实战
  • 【CXX-Qt】2.1.1 为 WebAssembly 构建
  • 汽车免拆诊断案例 | 2024 款路虎发现运动版车无法正常识别智能钥匙
  • Java EE 进阶:MyBatis
  • 【NLP】 11. 神经网络,线性模型,非线性模型,激活函数,感知器优化,正则化学习方法
  • SpringBoot配置文件加载优先级
  • 最大公约数(GCD)和最小公倍数(LCM)专题练习 ——基于罗勇军老师的《蓝桥杯算法入门C/C++》
  • 蓝桥杯2023年第十四届省赛真题-接龙数列
  • Linux后门程序工作原理的详细解释,以及相应的防御措施
  • c语言数据结构 双循环链表设计(完整代码)
  • Ubuntu版免翻墙搭建BatteryHistorian
  • freeswitch(开启抓包信息)
  • 观察RenderDoc截帧UE时“Event”代表什么
  • 丰富“互换通”产品类型,促进中国金融市场高水平对外开放
  • 北京警方:海淀发生小客车刮碰行人事故4人受伤,肇事司机已被查获
  • 商务部:中方将适时发布中美经贸磋商相关消息
  • 知名猎头公司创始人兼首席执行官庄华因突发疾病逝世,享年62岁
  • 3年多来俄乌要首次直接对话?能谈得拢吗?
  • 北京今日白天超30℃晚间下冰雹,市民称“没见过这么大颗的”