Leetcode
chinanfsk
这个作者很懒,什么都没留下…
展开
-
[Leetcode] 一文玩转二叉树的遍历
二叉树的前序,中序,后序,递归与非递归遍历二叉树的层序遍历,层序逐层输出遍历public class TraverseBinaryTree { /** Traverse a binary tree recursively */ public List<Integer> traverseRecursive(TreeNode root, Type type) { Lis...原创 2019-06-25 21:49:20 · 206 阅读 · 0 评论 -
[Leetcode] 高频题汇总 —— 链表
前言链表是一种常见的线性数据结构。对于单向链表,每个节点有一个 nextnextnext 指针指向后一个节点,还有一个成员变量用以存储数值;对于双向链表,还有一个 prevprevprev 指针指向前一个节点。与数组类似,搜索链表需要 O(n)O(n)O(n) 的时间复杂度,但是链表不能通过常数时间读取第 kkk 个数据。链表的优势在于能够以较高的效率在任意位置插入或删除一个节点。解题思路...原创 2019-08-29 15:40:15 · 1772 阅读 · 0 评论 -
[Leetcode] 常见排序算法的标准模板
快速排序(填坑法)public void quickSort(int[] arr, int left, int right) { int i = left, j = right; int pivot = arr[left]; // 以第一个元素为比较基准 while (i < j) { while (i < j && arr[j] > pivot)...原创 2019-08-18 23:31:18 · 463 阅读 · 2 评论 -
[Leetcode] 二分查找算法指南(进阶篇)
前言在上一篇 二分查找算法指南(基础篇)中,博主带大家总结了二分查找的基本模板,并且一起讨论了几道典型的例题。在今天的文章中,我们将着重讨论二分算法的一些难点题。问题形式这类问题往往第一眼看不出使用二分查找,因为它们大都不是单纯对元素下标进行查找就能判断查找方向,也没有固定的问法,但还是有共同点可循。它们往往需要对某个区间的值进行计算,得出结果后再与条件比较从而解题。具体问题让我们先从简...原创 2019-07-22 22:20:27 · 486 阅读 · 0 评论 -
[Leetcode] 高频题汇总 —— 栈 & 队列 & 堆
下一个更大元素 I给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。示例输入:nums1 = [4,1,2], nums2 = [1,3,4,...原创 2019-08-29 15:40:41 · 257 阅读 · 0 评论 -
[Leetcode] 高频题汇总 —— 树
路径总和 II给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。解题思路解法一:用深度优先算法DFS的思想来遍历每一条完整的路径,需要用到二维的vector,而且每当DFS搜索到新节点时,都要保存该节点。而且每当找出一条路径之后,都将这个保存为一维vector的路径保存到最终结果二位vector中。并且,每当DFS搜索到子节点,发现不是路径和时,返回上一个结...原创 2019-08-29 15:40:28 · 525 阅读 · 0 评论 -
[Leetcode] 常见题目汇总
算法高频题汇总 —— 链表高频题汇总 —— 树高频题汇总 —— 栈 & 队列 & 堆高频题汇总 —— 动态规划之字符串设计原创 2019-08-20 10:57:11 · 575 阅读 · 0 评论 -
[Leetcode] 设计LRU缓存机制
设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留...原创 2019-08-20 12:39:59 · 646 阅读 · 0 评论 -
[Leetcode] 二分查找算法指南(基础篇)
前言二分查找算法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短了搜索时间,具有很大的应用场景,而在 LeetCode 中,要运用二分搜索法来解的题目也有很多,但是实际上二分查找法的查找目标有很多种,而且在细节写法也有一些变化。问题形式二分查找算法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(logN)O(logN)O(logN) 完成搜索任务。题...原创 2019-07-21 14:50:00 · 558 阅读 · 0 评论 -
[Leetcode] 回溯算法指南
前言回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。许多复杂的,规模较大的问题都可以使用回溯法,有“通用...原创 2019-07-25 17:37:11 · 196 阅读 · 0 评论 -
[Leetcode] 实现 Trie (前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作。public class Trie { private TrieNode root; /** Initialize your data structure here. */ public Trie() { this.root = new ...原创 2019-06-27 16:29:10 · 105 阅读 · 0 评论 -
[Leetcode] 滑动窗口算法指南
前言滑动窗口类问题是面试当中的高频题,问题本身其实并不复杂,但是实现起来细节思考非常的多,想着想着可能因为变量变化,指针移动等等问题,导致程序反复删来改去,有思路,但是程序写不出是这类问题最大的障碍。本文会将 LeetCode 里面的大部分滑动窗口问题分析、总结、分类,并提供一个可以参考的模版,相信可以有效减少面试当中的算法实现部分的不确定性。问题形式滑动窗口这类问题一般需要用到双指针来进...原创 2019-07-08 15:58:10 · 2165 阅读 · 0 评论 -
[Leetcode] 设计链表
设计链表的实现。您可以选择使用单链表或双链表。单链表中的节点应该具有两个属性:val 和 next。val 是当前节点的值,next 是指向下一个节点的指针/引用。如果要使用双向链表,则还需要一个属性 prev 以指示链表中的上一个节点。假设链表中的所有节点都是 0-index 的。在链表类中实现这些功能get(index):获取链表中第 index 个节点的值。如果索引无效,则返回-1。...原创 2019-06-24 22:56:16 · 477 阅读 · 0 评论 -
[Leetcode] 设计循环双端队列
设计实现双端队列。你的实现需要支持以下操作:MyCircularDeque(k):构造函数,双端队列的大小为k。insertFront():将一个元素添加到双端队列头部。 如果操作成功返回 true。insertLast():将一个元素添加到双端队列尾部。如果操作成功返回 true。deleteFront():从双端队列头部删除一个元素。 如果操作成功返回 true。deleteLa...原创 2019-07-05 12:29:19 · 154 阅读 · 0 评论 -
[Leetcode] 一个公式团灭股票六题
以下是Leetcode经典的股票系列问题买卖股票的最佳时机买卖股票的最佳时机 II买卖股票的最佳时机 III买卖股票的最佳时机 IV买卖股票的最佳时机(含冷冻期)买卖股票的最佳时机(含手续费)这 6 道股票买卖问题是有共性的,我们通过对第四题(限制最大交易次数为 k)的分析一道一道解决。因为第四题是一个最泛化的形式,其他的问题都是这个形式的简化。第一题是只进行一次交易,相当于 k=...转载 2019-07-05 18:36:06 · 424 阅读 · 0 评论 -
[Leetcode] 设计哈希映射
不使用任何内建的哈希表库设计一个哈希映射具体地说,你的设计应该包含以下的功能put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。remove(key):如果映射中存在这个键,删除这个数值对。public class MyHashMap { stati...原创 2019-07-06 10:41:05 · 362 阅读 · 0 评论 -
[Leetcode] 一文玩转二叉搜索树
性质若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值若它的右子树不空,则右子树上所有结点的值均小于它的根结点的值它的左、右子树也分别为二叉搜索树二叉搜索树的结点定义和普通的二叉树一样,构造它的目的是为了提高查找、插入和删除的速度。查找/* 递归 */public TreeNode searchRecursively(TreeNode root, int val) {...原创 2019-07-24 23:48:02 · 162 阅读 · 0 评论 -
[Leetcode] 多线程
前言Java 多线程解题常用方法 & 工具类类型方法说明synchronizedObject.wait(), Object.notify(), Object.notifyAll()每一个用 synchronized 修饰的部分都是一个临界区,同一时间只允许一个线程访问LockLock.lock(), Lock.unlock()具体实现类:Reentr...原创 2019-08-29 15:39:07 · 622 阅读 · 0 评论