力扣热题100

力扣热题100刷题笔记[python] 力扣100刷题题解 阅读详情

1. 两数之和

时间空间复杂度为O(N),思路是:创建一个哈希表,对于每一个 x,先查询哈希表中是否存在 target - x,然后将 x 插入到哈希表中,即可保证不会让 x 和自己匹配。

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<Integer, Integer>();
        for(int i = 0; i < nums.length; i++){
            if(hashtable.containsKey(target - nums[i])){ //存在target - x
                return new int[]{i, hashtable.get(target - nums[i])};
            }
            hashtable.put(nums[i], i);
        }
        return new int[0];
    }
}

21. 合并两个有序链表

用递归的思路:判断 l1 和 l2 哪一个链表的头节点的值更小,递归地决定下一个添加到结果里的节点。

class Solution {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        if (l1 == null) {
            return l2;
        } else if (l2 == null) {
            return l1;
        } else if (l1.val < l2.val) {
            l1.next = mergeTwoLists(l1.next, l2); //选了此时的l1,再l1.next与l2比小
            return l1;
        } else {
            l2.next = mergeTwoLists(l1, l2.next);
            return l2;
        }
    }
}

160. 相交链表

思路一:哈希集合存放不重复的元素,先将A链表的结点add后,再依次判断B链表的结点是否有相同的。

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        Set<ListNode> set = new HashSet<ListNode>();
        ListNode p = headA, q = headB;
        while(p != null){
            set.add(p);
            p = p.next;
        }
        while(q != null){
            if(set.contains(q)){
                return q;
            }
            q = q.next;
        }
        return null;   
    }
}

思路二:用双指针,先判断A、B链表是否为空,有空的则根本无法相交。都不为空则要同时更新p和q,p不为空就next,为空则指向headB。q同理,最后指向同一个结点或者null,返回即可。

public class Solution {
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
        if(headA == null || headB == null){
            return null;
        }
        ListNode p = headA, q = headB;
        while(p != q){
            p = p == null ? headB : p.next;
            q = q == null ? headA : q.next;
        }
        return p;
    }
}

234. 回文链表

要学的思路是把链表的值复制到数组中,再用双指针进行判断。

class Solution {
    public boolean isPalindrome(ListNode head) {
        List<Integer> array = new ArrayList<Integer>();
        ListNode p = head;
        while(p != null){
            array.add(p.val);
            p = p.next;
        }
        //用双指针判断是否是回文
        int front = 0;
        int back = array.size() - 1;
        while(front < back){
            if(!array.get(front).equals(array.get(back))){
                return false;
            }
            front++;
            back--;
        }
        return true;
    }
}

283. 移动零

思路:分两次遍历,j用来记录当前数组中非0的元素,每遇到一个非0元素就往数组左边挪,遍历完后,j指向的是最后一个非0元素下标。第二次遍历就从j开始到结束,将其置为0。

class Solution {
	public void moveZeroes(int[] nums) {
		if(nums == null){
            return;
        }
        int j = 0;
        for(int i = 0; i < nums.length; i++){
            if(nums[i] != 0){
                nums[j++] = nums[i];
            }
        }
        for(int i = j; i < nums.length; i++){
            nums[i] = 0;
        }
	}
}	

101. 对称二叉树

要镜像对称,左右两边是相当的。递归的终止条件:两个结点为空;其中一个结点为空;两个结点不相等。随后再比较left.left, right.right和left.right, right.left

class Solution {
    public boolean isSymmetric(TreeNode root) {
        if(root == null){
            return true;
        }
        return dfs(root.left, root.right);
    }

    public boolean dfs(TreeNode left, TreeNode right){
        if(left == null && right == null){
            return true;
        }else if(left == null || right == null){
            return false;
        }else if(left.val != right.val){
            return false;
        }
        return dfs(left.left, right.right) && dfs(left.right, right.left);
    }
}

543. 二叉树的直径

思路:求直径等同于求路径经过节点数的最大值 - 1。定义一个递归函数,返回该节点为根的子树的深度。先递归调用左儿子和右儿子求得它们为根的子树的深度 L 和 R,则该节点为根的子树的深度即为max(L, R) + 1。设置一个全局变量ans记录,最后返回ans - 1就是直径。

class Solution {
    int ans;
    public int diameterOfBinaryTree(TreeNode root) {
        ans = 1;
        depth(root);
        return ans - 1;
    }
    public int depth(TreeNode node){
        if(node == null){
            return 0;
        }
        int L = depth(node.left);
        int R = depth(node.right);

        //ans是所有节点经过节点数的最大值
        ans = Math.max(ans, L + R + 1);
        //返回该节点为根的子树的深度
        return Math.max(L, R) + 1;
    }
}

20. 有效的括号

class Solution {
    public boolean isValid(String s) {
       if(s.isEmpty()){
           return true;
       } 
       Stack<Character> stack = new Stack<Character>();
       for(char c : s.toCharArray()){
           if(c == '('){
               stack.push(')');
           }else if(c == '{'){
               stack.push('}');
           }else if(c=='['){
               stack.push(']');
           }else if(stack.empty() || c != stack.pop()){
               return false;
           }
       }
       if(stack.empty()){
            return true;
        }
        return false;
    }
}
LeetCode 热题100题解(Java版本) 使用HashMap,遍历数组,判断当前元素的“补数”是否存在,如果存在直接返回结果,否则在Map中记录当前元素及其下标。 2、字母异位词分组 3、最长连续序列 先使用HashSet去重,如果对当前元素x存在x-1,那么肯定从x-1开始算序列长度会更长,所以当x-1存在时,就跳过x,去计算x-1。 二、双指针 1、移动零 不用双指针,先将非0数重新放入nums,最后放入0。 2、盛最多水的容器 3、三数之和 排序+双指针 4、接雨水 三、滑动窗口 1、无重复字符的最长子串 如果 阅读详情

相关推荐

LeetCode 热题 100 回顾

力扣最受刷题发烧友欢迎的 100 道题 LeetCode 热题 100 : 题目回顾、解题思路、复杂度分析、代码实现、验证算法

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 9万+

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

热题一百

LXY999222的博客 6285

PMD相位偏折术实战:如何用Python处理条纹图,让金属外壳的划痕无处遁形

本文详细介绍了PMD相位偏折术在金属外壳划痕检测中的应用,通过Python实现条纹图处理和局部特征增强技术,显著提升微小缺陷的检出率。文章涵盖从四步相移条纹图采集到形状图局部增强的完整流程,特别适合工业质检场景,帮助实现高精度、高效率的自动化检测。

weixin_29291573的博客 511

力扣热门100题——两数之和(最全解法)

1、两数之和 1、问题描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回答案。 2、示例 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3

humor2020的博客 2万+

基于反相器的超声波发生和气泡检测电路

本文主要介绍了关于超声波的两种电路——基于反相器的振荡电路和基于逻辑们的气泡检测电路

xehagy的博客 1960

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3043

力扣复习热题100

力扣

lixinaiqian的博客 1067

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解

多目标跟踪(MOT)中的卡尔曼滤波(Kalman filter)和匈牙利(Hungarian)算法详解 1. 概览 在开始具体讨论卡尔曼滤波和匈牙利算法之前,首先我们来看一下基于检测的目标跟踪算法的大致流程。 2. 卡尔曼滤波(Kalman filter) 目标跟踪中使用的就是最基础的 Kalman filter 算法。这里也仅仅讨论最基础的 Kalman filter 算法。 卡尔曼滤波算法的过程很简单,如下图所示。最核心的两个步骤就是预测和更新(下图的 correct)。 在目标跟踪任务中,目标的

生命在于折腾! 2万+

刷题记录(力扣热题100)

因为构成单词的字母相同,那么将单词按同一方法排序后产生的序列一定是相同的,那么再进行哈希也一定是相同的,所以我们此时已经确定了第一维的参数,只需将第二维设置为动态数组,然后根据哈希值进行插入即可,最后遍历哈希表将其整合为一个动态数组返回即可。两个指针从两边出发,算一下当前的体积,然后更新较小的那一条边,因为每次更新x轴都会减少,如果更新长边那么体积只会变小,而更新短边才有变大的机会,然后直到两个指针相遇结束,在此期间维护最大面积即可。给定一个数组在不改变其它元素的相对顺序的情况下,将数组中的0移动到末尾。

qq_51676853的博客 2118

别再为数据发愁了!盘点5个公开可用的医学图像数据集(含MRI/CT/PET合成任务)

本文详细介绍了5个高质量的公开医学图像数据集,涵盖MRI、CT和PET三大模态,适用于深度学习模型训练和医学图像合成任务。每个数据集均提供下载指南、预处理技巧和PyTorch加载示例,帮助研究人员快速获取和处理数据,解决医学AI开发中的数据瓶颈问题。

weixin_30689307的博客 524

在 SAP 系统中,成本中心(Cost Center)是成本核算与费用管控的基础组织单元,其设计质量直接决定了后续成本归集、分摊、分析及责任考核的准确性

SAP系统成本中心设计核心要点:1. 设计原则包括责任可控、业务同质、核算颗粒度适配、组织对齐及稳定性平衡;2. 划分维度主要有部门、功能、地域、项目和资产5类,可组合使用;3. 需避免颗粒度过细、跨责任主体归集等常见误区;4. 建议采用"明确目标-梳理业务-设计编码"三步法,建立科学的成本中心体系。合理的成本中心设计能精准归集费用、明确责任主体,为成本分析和管控奠定基础。

金牌架构师 1443

力扣hot100 LeetCode 热题 100 Java 哈希篇

【代码】力扣hot100 LeetCode 热题 100 Java 哈希篇。

多多的博客 955

Google Cameraserver 看门狗CameraServiceWatchdog超时crash原理分析

本文分析了Android CameraServiceWatchdog机制的工作原理。该看门狗用于监控相机服务关键操作(如close、flush)的超时情况,通过定时器线程检测阻塞问题。文章详细讲解了Watchdog的初始化流程、使能方式、内部定时器机制(默认周期100ms,650次循环触发超时),并提供了configureStreams阶段的客制化实现方案。当检测到超时,Watchdog会触发abort生成tombstone日志,便于调试分析。

1131

力扣热题100再刷

本文摘要总结了LeetCode上160道经典算法题解,涵盖数据结构与算法核心知识点。主要内容包括: 数据结构:链表(相交/回文/反转)、二叉树(翻转/遍历/直径)、栈(最小栈/有效括号)、堆(前K高频)、字典树、并查集等。 算法思想: 动态规划:打家劫舍系列、股票买卖、编辑距离、路径问题等典型DP场景 双指针:接雨水、盛水容器、移动零等高效解法 回溯搜索:组合总和、子集生成、括号生成等模板应用 贪心算法:跳跃游戏、任务调度等最优策略 分治递归:二叉树问题、归并排序等分治思路 高频题型: 数组操作(旋转图像、

fancyxiaoxiao的博客 1033

【unity游戏开发入门到精通——UGUI】文本控件 —— TextetMeshPro新文本控件(TextMeshPro - Text(UI)和TextMeshPro - Text)

文本组件是UGUI中最常用的组件,它的作用是对文本数据进行处理并显示。UGUI的文本组件可以分两为种——Text旧文本控件、TextMeshPro新文本组件。本文主要是介绍TextMeshPro新文本控件,而TextMeshPro新文本控件又可以分为两种——TextMeshPro - Text(UI)和TextMeshPro - Text。TextMeshPro是Unity收购的一个第三方插件,现在已经自动内置到编辑器中,只要使用一次就会自动导入到工程。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 3768

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

力扣热题 100:图论专题经典题解析

给定一个二维网格,其中 ‘0’ 表示空单元格,‘1’ 表示新鲜橘子,‘2’ 表示腐烂橘子。每分钟,腐烂的橘子会使其上下左右的新鲜橘子腐烂。我们可以遍历网格中的每个元素,当遇到陆地时,将其标记为已访问,并递归或迭代地访问其相邻的陆地,直到所有相连的陆地都被访问过。我们可以将所有腐烂的橘子作为初始节点,同时进行 BFS,逐层腐烂相邻的新鲜橘子。在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。给定一个由 ‘0’(水)和 ‘1’(陆地)组成的二维网格,计算其中岛屿的数量。

m0_72686196的博客 1557

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

力扣热题100(附刷题表版)

不仅方便查看题目,并且,在完成题目后,,我放在了结尾,大家自取,直接复制粘贴到。2. 字母异位词分组(中等)3. 最长连续序列(中等)1. 两数之和 (简单)时做记录,整理了下面。

2301_79966297的博客 2238

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

LeetCode hot100-力扣热题100刷题笔记(基于Java)

一、1.两数之和题目链接法一:两层for循环暴力解(不采用)法二:用哈希表存放<值,下标>,方便找另一个数,省去了遍历另一个数的时间 二、49.字母异位词分组题目链接法一:法1把两个单词排序后再比较,相同的话就是异位词,这里要注意的点是不能直接用char[]当key,因为没写equals和hashcode方法导致每次key都不一样会返回新的列表。 采用:法二:把两个单词字母计数比较,各字母计数一样的话就是异位词,这里要注意的点是sb.appen(‘a’+i)和sb.append(hash[i])必须分开写,

lkjsldkf的博客 606

力扣热题 100:技巧专题经典题解析

异或运算的性质是:一个数异或自己为 0,一个数异或 0 为自己。因此,遍历数组,将所有元素异或在一起,最终结果就是只出现一次的数字。我们可以维护一个候选元素和其计数,遍历数组,如果当前元素与候选元素相同,则计数加 1,否则计数减 1。给定一个包含红色、白色和蓝色的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色的顺序排列。遍历数组,根据元素的值交换到相应的位置。给定一个包含 n + 1 个整数的数组,其中每个元素在 1 到 n 之间,至少存在一个重复元素。找到那个只出现一次的元素。

m0_72686196的博客 1764

《LeetCode 热题 100》整整 100 题量大管饱题解套餐 上

《LeetCode 热题 100》整整 100 题量大管饱题解套餐

Lenyiin 3591

LeetCode热题100——技巧

LeetCode热题100——技巧

qq_56086076的博客 1395

力扣热题 100:栈专题经典题解析

在实际刷题过程中,建议大家多动手实践,理解解题思路的本质,这样才能更好地应对各种算法问题。今天,我们就来详细解析栈专题中的几道经典题目,帮助大家更好地理解解题思路和技巧。我们可以使用两个栈,一个用于存储所有元素,另一个用于存储最小值。解释:最大面积的矩形由高度为 5 的柱子和其右侧的柱子形成,宽度为 2,面积为 5 * 2 = 10。我们可以使用两个栈,一个用于存储字符,另一个用于存储数字。给定一个经过编码的字符串,返回其解码后的字符串。,表示一组柱状图的高度,计算能够形成的矩形的最大面积。

m0_72686196的博客 1387

【LeetCode热题100】

LeetCode热题10022. 括号生成(🎂)76. 最小覆盖子串(🎂)15. 三数之和(🎂)105. 从前序与中序遍历序列构造二叉树(🎂)56. 合并区间(🎂)200. 岛屿数量105. 岛屿的最大面积463. 岛屿的周长(🎂)827. 最大人工岛(🎂)239. 滑动窗口最大值17. 电话号码的字母组合75. 颜色分类79. 单词搜索32. 最长有效括号(🎂)33. 搜索旋转排序数组(🎂)39. 组合总和48. 旋转图像(🎂)64. 最小路径和70. 爬楼梯72. 编辑距离(🎂 原问题很简单,注意变体,

PaperReader的博客 1564

LeetCode 热题100

LeetCode 热题100

牛牛博士博客 1371

Leetcode热题100道

给定一个整数数组 和一个整数目标值 ,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1: 示例 2: 示例 3: 字母异位词分组_49 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。字母异位词 是由重新排列源单词的所有字母得到的一个新单词。示例 1: 示例 2: 示例 3: 将每串字符串的字符进行排序后作为key,然后放到对应的v

枫度柚子 2275

LeetCode 热题 100 链表

LeetCode Hot 100 中与链表相关的题目,解题思路,代码实现讲解。

有耐心做好简单事情,坚持写blog 1434
上一篇: web最后突击点
下一篇: 专业课复试问答
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值