leetcode
文章平均质量分 91
wonner_
这个作者很懒,什么都没留下…
展开
-
leetcode树总结
面试中对树的考察多为二叉树、二叉查找树等。常见的二叉树操作有:前序遍历、中序遍历、后续遍历(递归、迭代)94.二叉树的中序遍历中序遍历定义:先左子树,后根节点,再右子树。首先给出简单的递归解法。/** * Definition for a binary tree node. * public class TreeNode { * int val; * Tre...原创 2020-03-15 20:38:16 · 352 阅读 · 0 评论 -
面试常用排序算法+LeetCode排序算法应用
排序算法也是面试中常常提及的内容,问的最多的应该是快速排序、堆排序、归并排序。这些排序算法很基础,很可能知道其思想,但在写代码时细节上出错。因此本文的书写主要参考了十大经典排序算法动画与解析,看我就够了!(配代码完全版),对基于比较的排序算法:冒泡排序、插入排序、选择排序以及归并排序、快速排序和堆排序重新自己实现了一遍。上文中给出的算法动画有助于排序算法的理解。以下算法全部基于数组原地排序。...原创 2020-03-15 10:55:59 · 328 阅读 · 0 评论 -
[leetcode]买卖股票的最佳时机
121.买卖股票的最佳时机给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 =...原创 2020-03-09 13:45:33 · 584 阅读 · 0 评论 -
leetcode单调栈总结
单调栈是在栈的先进后出基础之上额外添加一个特性:从栈顶到栈底的元素是严格递增(or递减)。动画:什么是单调栈?一文很直观的解释了单调栈并给出了单调递减栈的一个例子,但是上文中误写为单调递增栈。当遇到的问题,和前后元素之间的大小关系有关系时可以考虑使用单调栈。如单调递增栈可以找到左起第一个比当前数字小的元素,单调递减栈可以找到左起第一个比当前数字大的元素。以单调递减栈为例,每当我们遇到一个比当前...原创 2020-03-04 10:49:20 · 595 阅读 · 0 评论 -
[leetcode][dfs]深度优先搜索算法总结
dfs算法通常使用递归实现,逻辑清晰。在递归开头写一个跳出条件,然后继续向下递归遍历即可。要用一个额外的空间记录节点访问情况,遍历过的地方不再遍历,防止陷入循环,或者在原空间上进行修改。下面给出图上的dfs算法实现,与树有关的算法在树的博客中单独总结。200.岛屿数量给定一个由'1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上...原创 2020-03-03 11:36:45 · 655 阅读 · 0 评论 -
leetcode拓扑排序算法总结
在图论中,拓扑排序(Topological Sorting)是一个有向无环图(DAG, Directed Acyclic Graph)的所有顶点的线性序列。所以可以通过有向图是否存在拓扑排序来确定该有向图是否有环。计算有向图拓扑排序的常见算法如下:从 DAG 图中选择一个 没有前驱(即入度为0)的顶点并输出。 从图中删除该顶点和所有以它为起点的有向边。 重复 1 和 2 直到当前的 DAG...原创 2020-03-02 16:55:08 · 493 阅读 · 0 评论 -
[leetcode][DP] 动态规划总结
当优化问题可分为多个子问题,子问题相互关联,子问题的解被重复使用时,考虑使用动态规划求解。 使用动态规划的条件包括以下两点优化子结构:问题的和优化解包含子问题优化解,通过求解子问题使得我们可以自上而下的完成求解过程。 重叠子问题:在问题的求解过程中,很多子问题的解将被多次使用。通常将子问题优化解代价保存下来,逐步构造最优解。 求解动态规划问题,最最重要的是找到递归表达式...原创 2020-02-28 21:06:41 · 791 阅读 · 0 评论 -
面试中的字符串算法
本文提到的题目部分来自《程序员算法面试指南》一书,这本书的题目可以在牛客网进行在线编程练习。部分来自LeetCode。KMP算法提到字符串问题,首先想到的就是KMP算法,它用于解决字符串匹配问题,在字符串str(长度为N)中查找子串match(长度为M)出现的位置。暴力的解法是从左到右遍历str的每一个字符,将当前字符作为第一个字符是否与match匹配。若与match匹配到一半发现不匹配了...原创 2020-02-25 11:54:14 · 841 阅读 · 0 评论 -
leetcode二分查找算法总结
二分查找(binary search)是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。二分查找算法在情况下的复杂度是对数时间,进...原创 2019-12-03 21:50:52 · 755 阅读 · 0 评论 -
[leetcode]堆排序 求前k大的数
前一篇博客中写到了排序算法,其中包含一个堆排序,因此本篇博客讲解堆这个数据结构及其应用。关于最大堆最小堆以及初始建堆和整理堆在上篇博客中有提及,此处不再赘述。下面讲解一个堆的重要应用,求n个数中前k个大的数,一般思路是将n个数排序,取前k个数,但当n的数量庞大无法加载到内存时,需要另外一种思路,即利用堆,只维护k个树的大小而不需维护全部。具体的思路是:先建一个k个数的小堆,然后从k+1个数往后的值...原创 2018-07-13 11:20:17 · 5748 阅读 · 0 评论 -
leetcode回溯算法(backtracking)总结
回溯算法的定义:回溯算法也叫试探法,它是一种系统地搜索问题的解的方法。回溯算法的基本思想是:从一条路往前走,能进则进,不能进则退回来,换一条路再试。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步...原创 2018-05-20 13:16:21 · 13771 阅读 · 0 评论 -
leetcode排序总结
插入排序,如147链表插入排序。75. Sort Colors给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。注意:不能使用代码库中的排序函数来解决这道题。示例:输入: [2,0,2,1,1,0]输出: [0,0,1,1,2,2]进阶:一个直观的解决...原创 2018-05-12 12:23:11 · 3700 阅读 · 0 评论 -
Leetcode链表总结
由于最近开始面临保研找实习,所以打算刷波leetcode,之前一直想做这件事,巩固一下自己的基础,但总是被各种事情耽搁,由此写下这篇博客作为督促。在这期间偶然间看到同学的博客,他也打算刷leetcode,但刚做了一题就拿到了滴滴的offer,而且那一题跟我做的第一道题一样,让人感叹的巧合。希望我也能像他一样得到满意的结果。 本篇文章不会包含代码的讲解,只是做题目的一点思路心得,相关答...原创 2018-04-07 23:56:18 · 2039 阅读 · 0 评论