
leetcode
RenSV
为BUG生
展开
-
leetcode76题 Minimum Window Substring
最小窗口子字符串 题目要求:给定一个字符串S和T,在S中找到一个包含T中所有字符的最短字串,时间复杂度为O(n). 注1:如果这个窗口不存在,返回一个空字符串 注2:该题保证在S中总是只有一个唯一的最小窗口解决思路定义Java语言解决方案class Solution { public String minWindow(String s, String t) {原创 2018-03-11 20:16:31 · 196 阅读 · 0 评论 -
leetcode 第235题 和 第236 题:Lowest Common Ancestor
前言:第235题 和 第236 题都是求解一棵树中两个结点最近公共祖先(LCA)问题,但是不同之处在于235给出的树为一棵二叉搜索树(BST),而236是一颗一般的二叉树,这样的话在235中利用BST的性质可以很方便的解决问题,但是在236中就必须全面考虑。 一般而言,找一棵树的LCA可以分为三种情况:俩个结点分别在LCA的不同子树,两个结点中的一个就是LCA。第235题 Lowest ...原创 2018-04-01 21:11:09 · 521 阅读 · 0 评论 -
leetcode第51题 N-Queens
N皇后问题是一个非常经典的问题,即如何能够在N*N的棋盘上放置N个皇后,使得任何一个皇后都无法直接吃掉其他的皇后。为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。注意仅当 N= 1 或N≥ 4 时问题有解。 解题思路这个问题依然可以用递归来解决。由于每一行只能放置一个皇后,所以可以尝试在从每一行的N个位置上尝试放置皇后,直到放满N个皇后。在尝试的过程中,维护三个数组表示该位...原创 2018-04-08 22:19:14 · 241 阅读 · 0 评论 -
leetcode 第77题 Combinations
题目要求给定两个整数n和k,返回1 … n中所有可能的k个数的组合。例如下图: 解题思路对于1到n个整数进行k个组合,可以这样构造一个递归树,对与 整数i来说,只要能从i到n中找到k-1个元素即可,在这个递归过程中记录递归结果,等记录到k个结果时,就返回。JAVA代码class Solution { List<List<Integer>>...原创 2018-04-08 21:53:43 · 323 阅读 · 0 评论 -
leetcode 第46题和第47题 全排列问题
leetcode 第46题和第47题 都是求一个给定数组中的全排列问题,不同之处在于47题中数组的元素可以重复。leetcode 第46题 解题思路这也是一个递归问题。对于数组中的每个元素,它的全排列就等于它本身加上除它以外所有的全排。所以只要这样依次计算全排列就行。JAVA代码实现class Solution { List<List<Integ...原创 2018-04-08 21:41:07 · 1621 阅读 · 2 评论 -
leetcode 第17题 Letter Combinations of a Phone Number
题目要求给定一个数字字符串,返回数字可能表示的所有可能的字母组合。 数字到字母的映射(就像在电话按钮上一样)在下面给出。 例如: 输入字符串 “23”,输出结果为: “ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”。解题思路这是一个典型的可以用递归解决的树形问题。对于每个数字,都分别代表了几个字母。组合在一起就变成了一个...原创 2018-04-08 21:08:48 · 234 阅读 · 0 评论 -
leetcode 第19题 Remove Nth Node From End of List
题目要求给定一个链表和一个整数n,移除链表的倒数第n个节点 假设给定的整数n在链表的范围内。解题思路如果先将链表遍历一遍,很容易移除数第n个元素。但是如果只能遍历一遍时,有一个很巧妙的办法是设置一个快指针,一个慢指针,当快节点到达链表末尾时,慢指针刚好到达倒数第n+1个节点。要实现这种思路,只要先将快指针移动n+1次,然后两个一起移动即可。JAVA代码实现/** * D...原创 2018-03-25 22:02:12 · 151 阅读 · 0 评论 -
基于链表的归并排序
归并排序基本介绍归并排序排序是一种常用的时间复杂度为O(n*lg n)的算法,它的基本想法是先对数据不断二分,然后对分开的每段数据进行合并,利用递归的思想,很容易完成排序。归并排序又分为自顶向下和自底向上两种实现方式,自顶向下实现起来比较简单,就是递归,对数据进行二分和合并。对与自底向上而言,,则需要考虑到每次归并元素的个数。 这里要注意的是,对与每次归并来说,必须保证链表的完整性,不能出现...原创 2018-03-25 21:37:25 · 709 阅读 · 0 评论 -
基于链表的插入排序
插入排序的基本介绍插入排序的时间复杂度为O(n*n),但是在 给定数据近乎有序的情况下,它的时间复杂度可以接近O(n).它的基本思想是对于当前的节点。不断与该节点前面节点进行比较,直到它前面的数据小于它。如下图所示: 对元素2进行排序时,只要往前一直找,就可以将它插入合适的位置。 插入排序基于数组很容易实现,原因在于我们可以很方便的找到每一个位置上的数据。但是链表不能这么做,原因在于很...原创 2018-03-25 21:15:43 · 269 阅读 · 0 评论 -
leetcode 第149题 Max Points on a Line
题目要求:给定2D平面上的n个点,找出位于同一条直线上的最大点数。解决思路这个问题的一种方案是考虑两点之间斜率,把斜率相同的点放置在一个表中,再找到包含最多点的斜率。这个其中有两点需要关注,一个是点坐标的取值范围,一个是涉及斜率计算的问题。 我的想法是对于每一个点,分别计算在它之后的所有不同点的斜率,并且用一个Map集合存起来,对于这个点,找出斜率最大的那个。考虑它的正确性,我们...原创 2018-03-18 20:58:29 · 211 阅读 · 0 评论 -
leetcode Two Sum问题
Two Sum ITwo Sum II - Input array is sorted第1题 Two Sum I题目要求: 给定一个整数数组,返回这两个数字的索引,使它们合计成一个特定的目标。 限定条件: 返回值为这两个数字的索引,索引从0开始 假定每个输入都只有一个解,且不能使用相同的元素两次解决思路由于数组有序,故采用对撞指针的方...原创 2018-03-18 20:19:36 · 438 阅读 · 0 评论 -
二叉搜索树(BST)的相关问题
前言:在二叉搜索树中,对于每个结点,它的所有左子树结点的元素小于当前节点数据,所有右子树结点大于当前结点。 二叉搜索树的三种常见操作:查找、删除、插入。查找在查找操作中,就可以看到二叉搜索树的优势,它的时间复杂度为O(lg n).//查找 public TreeNode find(TreeNode root,int data){ if(root == null) ...原创 2018-04-01 22:14:52 · 265 阅读 · 0 评论