![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LeetCode算法
文章平均质量分 81
Wu_Candy
这个作者很懒,什么都没留下…
展开
-
LeetCode初中级算法题解 - 二叉树篇
引言: 搜集题目的难度是在简单级别和中级级别,也是面试常考的题目。题目的题解,使用的开发语言是Swift。 因为题目的描述很长,以及有各种案例提示,为了不占篇幅,所以没有展示出来,大家可以直接通过题号查询,或者点击链接的形式去查看题目的描述。 文章的写作顺序是:1. 展示题号和以及题目的链接 2. 核心思想的讲述 3. 代码实现。最后本文提供的代码都是在LeetCode上提交通过的。Binary Tree Questions(二叉数相关问题)1.LeetCode_1...原创 2021-08-20 10:02:58 · 155 阅读 · 0 评论 -
面试必备 LeetCode 链表算法题汇总
引言: 搜集题目的难度是在简单级别和中级级别,也是面试常考的题目。题目的题解,使用的开发语言是Swift。 因为题目的描述很长,以及有各种案例提示,为了不占篇幅,所以没有展示出来,大家可以直接通过题号查询去查看题目的描述。 文章的写作顺序是:1. 展示题号和以及题目的链接2. 核心思想的讲述3. 代码实现。最后本文提供的代码都是在LeetCode上提交通过的。1. Linked List Question...原创 2021-08-20 09:57:59 · 214 阅读 · 0 评论 -
LeetCode 1143:初中级算法题解 - 动态规划
引言: 今天分享的题目是 LeetCode 上的第 1143 题最长公共子序列,难度是中等。解题的思路是动态规划(Dynamic Programing)。 动态规划的题解都是不好想到的,如果没有动态规划相关的的经验,基本上想不到这样的解题方法。我写这篇文章的意义,也就是将解这道题或者类似题目的动态规划的解题方法讲解清楚,为后续的发展打下基础。1.最长公共子序列题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 ,返回原创 2021-08-19 16:17:50 · 295 阅读 · 0 评论 -
LeetCode初中级算法题解:排序算法介绍篇
引言: 搜集题目的难度是在简单级别和中级级别,也是面试常考的题目。题目的题解,使用的开发语言是 Swift。 因为题目的描述很长,以及有各种案例提示,为了不占篇幅,所以没有展示出来,大家可以直接通过题号查询,或者通过搜索关键字去查看题目的描述。 文章的写作顺序是:1. 展示题号和以及题目的链接2. 核心思想的讲述3. 代码实现最后本文提供的代码都是在LeetCode上提交通过的。 Author: JefferyYu...原创 2021-08-19 16:06:52 · 140 阅读 · 0 评论 -
LeetCode 283.移动零:一个非常有用的技巧
题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]要求:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。解题核心思想 移动零是一个很有用的技巧。接下来,讲下这个技巧的实现原理。 这里参考了快速排序的思想,快速排序首先要确定一个待分割的元素做中间点 x,然后把所有小于等于 x 的元素放到 x 的左边,大于 x 的元素放到其右边。原创 2021-08-19 09:35:41 · 73 阅读 · 0 评论 -
LeetCode算法题:链表相交
题目描述给定两个(单向)链表,判定它们是否相交并返回交点。请注意相交的定义基于节点的引用,而不是基于节点的值。换句话说,如果一个链表的第 k 个节点与另一个链表的第 j 个节点是同一节点(引用完全相同),则这两个链表相交。输入:listA =[4,2,8,4,5,6], listB =[5,0,1,8,4,5]输出:[8,4,5]核心思路:你变成我,我变成你,我们便相遇了。那么为什么能相遇呢?设长链表 A 长度为 LA,短链表长度 LB;由于速度相同,则在长链表 A...原创 2021-08-18 13:27:05 · 201 阅读 · 0 评论 -
LeetCode-剑指offer22:链表中倒数第k个节点
题目描述:输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.解决方案:[ 可行,但是提交超时 ]我的第一个想法就是先翻转链表,把链表1->2->原创 2021-08-18 13:24:46 · 143 阅读 · 0 评论 -
LRU 缓存机制
因为希望是O(1)的时间复杂度,所以很容易想到需要使用哈希表。那么接下来,就直接讲实现思路了。 LRUCache 的常见实现方式是:哈希表+双向链表。那为什么不是哈希表+数组了。因为数组的查找和替换是O(N)级别的,所以需要使用双向链表。思路:说明: map用来作为存储容器,key是传进来的Int值,value是Node节点;即map[int] = node。 Node节点信息包含 {keyvalueprev:Nodenext:Node...原创 2021-08-18 13:22:51 · 141 阅读 · 0 评论 -
LeetCode.两数之和和三数之和
两数之和 2次for循环O( N2) 的做法就不说了,大家都会。我说下O(N)时间复杂度的做法。解题思路: 一次for循环。遍历的时候用字典记录下遍历到的值,不过是以num为key,以下标index为value 继续遍历的时候,就用 target - num作为key去字典中取值,如果取到了说明存在,返回结果 若没有取到,就以num为key,index为value存入字典 代码如下: func twoSum(_ nums: [Int], _.原创 2021-08-18 13:17:55 · 175 阅读 · 0 评论 -
LeetCode 17. 电话号码的字母组合
题目来源于 LeetCode 的第 17 题,难度为:中等。目前的通过率是56.8%。 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按任意顺序返回。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 很多排列组合相关的问题,都可以通过(Depth First Search)dfs,深度优先搜索来解决。解题思路分析:为了便于理解解题思路,我选取[2,5,8]为例来分析。[2,5,8]对应的字母分别是:[ "abc", "jkl原创 2021-08-18 13:14:33 · 105 阅读 · 0 评论 -
LeetCode 99. 恢复二叉搜索树
题目来源于 LeetCode 的第 99 题,难度为:中等。目前的通过率是61.9%。 给你二叉搜索树的根节点 root ,该树中的两个节点被错误地交换。请在不改变其结构的情况下,恢复这棵树。 首先说下二叉搜索树的性质,就是根节点的左子树上的值都比根节点的值小,根节点的右子树上的值都比根节点的值大【如上图的右边的那颗树】。其特性满足一个性质,就是使用中序遍历来打印二叉搜索树时,是一个升序的序列,比如上图右边的二叉搜索树使用中序遍历的打印结果就是:1->2->3->4。原创 2021-08-18 13:11:36 · 158 阅读 · 0 评论 -
LeetCode 236:二叉树的最近公共祖先
特别说明:输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4输出:5解释:节点 5 和节点 4 的最近公共祖先是节点 5 。因为根据定义最近公共祖先节点可以为节点本身。解题思路: 一般二叉树相关的算法题,都可以使用递归这个编程技巧来解题,本题也不例外。分析:2个节点存在的位置,不外乎以下4种情况: 要么都在左子树上 要么都在右子树上 要么一个在左,一个在右 至少有一个不在这颗二叉树...原创 2021-08-18 11:40:50 · 388 阅读 · 2 评论 -
LeetCode—剑指 Offer 47. 礼物的最大价值
题目来源于 LeetCode 的剑指 Offer 47题,难度为:中等。目前的通过率是68.8%。 在一个m*n的棋盘的每一格都放有一个礼物,每个礼物都有一定的价值(价值大于 0)。你可以从棋盘的左上角开始拿格子里的礼物,并每次向右或者向下移动一格、直到到达棋盘的右下角。给定一个棋盘及其上面的礼物的价值,请计算你最多能拿到多少价值的礼物? 首先像这种求最值的问题,一般都是往动态规划上面去靠。但是即使知道使用动态规划,但是定义dp的状态表达的意义也是一件不容易的事情,不过我们可以多看多...原创 2021-07-21 18:18:54 · 164 阅读 · 1 评论 -
LeetCode算法:贪心策略到动态规划
今天主要通过一个经典的问题来讲解贪心策略和动态规划。贪心策略概念就是:每一步都采取当前状态下最优的选择(局部最优解),从而希望推导出全局最优解。动态规划的核心思想是:通过求解子问题的最优解,然后推导出原问题的最优解。本文先介绍下贪心算法的缺点进而引出动态规划以及动态规划的解题中间的详细流程。题目来源于 LeetCode 的第 206 题,难度为:中等。目前的通过率是43.6%。 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少原创 2021-07-21 18:08:38 · 302 阅读 · 0 评论 -
LeetCode:最长不含重复字符的子字符串
题目来源于 LeetCode 的第 3 题,难度为:中等。目前的通过率是37.3%。解题思路的思考: 以abcabcbb为例,找出以每个字符结束,不包含重复字符的最长子串。那么其中最长的那个字符串即为答案。对于示例一中的字符串,我们列举出这些结果,其中括号中表示选中的字符以及最长的字符串: 以[a]bcabcbb结束的最长字符串为[a]bcabcbb,长度为1 以a[b]cabcbb结束的最长字符串为[ab]cabcbb,长度为2 以ab[c]abc...原创 2021-07-21 18:01:48 · 264 阅读 · 0 评论 -
LeetCode—链表反转
题目来源于 LeetCode 的第 206 题,难度为:easy。目前的通过率是71.7%。题目描述反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL题目解析设置三个节点pre、cur、next (1)每次查看cur节点是否为NULL,如果是,则结束循环,获得结果 (2)如果cur节点不是为NULL,则先设置临时变量next为cur原创 2021-07-21 17:57:20 · 67 阅读 · 0 评论