随笔分类 - leetcode
leetcode刷题记录
摘要:关于排序算法的考察,需重点掌握 快速排序 、归并排序 、 堆排序 。 1. 快速排序 1.1 快速排序算法的思想与实现 快速排序的重点是要掌握其划分的思想,划分算法需要先挑选一个 元素作为 pivot。在划分执行完之后, pivot左边的元素都小于等于它,右边的元素都大于等于它,pivot 的位置就
阅读全文
摘要:实现一个 LRUCache 类:使得 put 和 get 操作都达到 O(1) 哈希表 + 双向队列 双向队列 中存储 缓存(页面)信息,使用哈希表可以实现O(1) 找到 缓存的位置,使用双向队列可以 实现O(1) 时间的从头部插入(更新刚用过的页为最新状态)和从尾部删除(淘汰最近最久未使用的页)。
阅读全文
摘要:题目描述: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效的 括号组合。 方法一: 回溯 + 剪枝 将 生成 n 对 有效括号的过程就是在一棵剪枝了的二叉树上遍历的过程。下图是 n = 3 的情况。 从上面的图片中我们可以很明显的看到,最后五条画黑线的叶节点就是最终
阅读全文
摘要:《滑动窗口防滑记》 labuladong 滑动窗口老猛男,子串问题全靠他。 左右指针滑窗口,一前一后齐头进。 上面的打油诗节选自一个我很喜欢的博主东哥,生动凝练地概括了滑动窗口算法的精髓, 本文介绍的很棒的滑动窗口框架就是来自这位老哥的一篇公众号文章。 推荐给大家:https://mp.weixin
阅读全文
摘要:CategoryDifficultyLikesDislikes algorithms Easy (55.00%) 1235 - TagsCompanies 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你
阅读全文
摘要:验证二叉搜索树 CategoryDifficultyLikesDislikes algorithms Medium (31.28%) 620 - TagsCompanies 给定一个二叉树,判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征: 节点的左子树只包含小于当前节点的数。 节
阅读全文
摘要:1.DFS 这道题让将矩阵中被'X'包围的不接触边框的'O组成的连通分量用'X'替换,显然可以使用DFS的方法解答,直接的想法是,遍历二维矩阵,遇到‘O’使用DFS判断由'O'组成的连通分量有没有接触到边框, 没有接触到DFS返回true,并将'O组成的连通分量用'X'替换;否则返回false,不替
阅读全文
摘要:本题可以套用和 [LeetCode] 200. Number of Islands 岛屿的数量 与 [LeetCode 695] Max Area of Island 岛的最大面积一样的dfs模版,不同的是DFS的遍历路径不同,本题 采用的是类似十字遍历方式,具体见如下代码。 1 /* 2 * @D
阅读全文
摘要:这道求岛屿数量的题的本质是求矩阵中连续区域的个数,很容易想到需要用深度优先搜索 DFS 来解,我们需要建立一个 visited 数组用来记录某个位置是否被访问过。由于本题没有要求不能破坏原矩阵, 所以可以使用DFS的方法将矩阵中每一块连续的1都置为0,以此标记以访问过,则可以到空间复用的目的。特别重
阅读全文
摘要:1. DFS 从一个节点出发,使用 DFS 对一个图进行遍历时,能够遍历到的节点都是从初始节点可达的,DFS 常用来求解这种 可达性 问题。 在程序实现 DFS 时需要考虑以下问题: 栈:用栈来保存当前节点信息,当遍历新节点返回时能够继续遍历当前节点。可以使用递归栈(递归函数调用)。 标记:和 BF
阅读全文
摘要:1.暴力法: 本题让求给定字符串的最长的无重复字符的子串,首先想到暴力解法,穷举出字符串的所有子串,并判断每个子串是否是不重复子串,具体使用hashset或set判是否有重复字符;暴力法效率很差,时间O(n^3),空间O(n);参考代码如下: 1 class Solution { 2 public:
阅读全文
摘要:Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum. Example: Inpu
阅读全文
摘要:对于链表的问题,根据以往的经验一般都是要建一个dummy node,连上原链表的头结点,这样的话就算头结点变动了,我们还可以通过dummy->next来获得新链表的头结点。这道题的要求是只通过一次遍历完成,就拿题目中的例子来说,变换的是2,3,4这三个点,我们需要找到第一个开始变换结点的前一个结点,
阅读全文
摘要:本题要求将给定的单链表翻转,是校招面试手撕代码环节的高频题,能很好地考察对单链表这一最简单数据结构的理解;可以使用迭代和递归两种方法对一个给定的单链表进行翻转,具体实现如下: 1 class Solution { 2 public: 3 ListNode* reverseList(ListNode*
阅读全文

浙公网安备 33010602011771号