自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(108)
  • 收藏
  • 关注

原创 LintCode 685 First Unique Number in Data Stream

思路如果没限制遍历次数的话,可以第一遍遍历简单的先用hashmap记录次数,第二次遍历nums数组来寻找第一个unique的数字。如果只能遍历一遍的话就是用linkedlist+hashmap的做法。时间复杂度O(n)空间复杂度O(n)代码public class Solution { /** * @param nums: a continuous stream of ...

2019-11-10 14:49:41 441

原创 LeetCode 126 Word Search II

思路dfs+hashmap/trie。【hashmap版本】首先生成一个存前缀和单词的hashmap用来存一个前缀是否为一个单词,假设一个字符串已经是单词(true)了就不要更新成前缀(false)了。接下来在棋盘上4个方向dfs,由于一个单词中一个位置只能使用一次,于是需要使用一个visit来记录是否已经用过。如果当前字符串不在hashmap中就直接结束,否则如果当前字符串是一个单词,将其...

2019-10-26 14:56:50 158

原创 LeetCode 38 Count and Say

思路字符串处理。遇到连续相同的数字就接着寻找下去(i+1 < len && s[i] == s[i+1]), 否则就将出现次数和字符加到结果字符串里面并且count复原为1,这样count的初始值应该为1,因为无论是否满足上面的条件,都要算一个字符。每一轮都会更新所要搜索的字符串。时间复杂度O(n^2)【最坏情况】空间复杂度O(1)代码class Solution ...

2019-10-16 10:16:17 150

原创 LeetCode 299 Bulls and Cows

思路使用2个hash table,分别存储secret和guess中每个数字出现的次数。同时遍历两个数组,如果secret和guess对应的数字相同,那么A++;否则就将二者记录到对应的hash table中。最后同时遍历两个hash table,分别取每一个位置的secret和guess中的最小值作为匹配值,加到B上。时间复杂度O(len)空间复杂度O(len)代码class Solu...

2019-10-14 06:51:44 112

原创 LeetCode 686 Repeated String Match

思路假设重复A字符串k次,使得A.length >= B.length,只需比较此时B是否为A的子串和k+1时B是否为A的子串即可,因为再多了就是重复查找了。利用String/StringBuilder的indexOf来得到是否为子串。时间复杂度O(n^2)空间复杂度O(1)代码class Solution { public int repeatedStringMatch(...

2019-10-13 15:12:45 83

原创 LeetCode 847 Shortest Path Visiting All Nodes

思路由于是求简单图最小路径问题,所以可以用BFS来解决(最短路模版,每次遍历一层节点)。可以发现,一条路径的最终的长度只与最后一个经过的点有关系,跟访问前面节点的顺序没有关系。所以我们可以用一个二维visit数组记录每种路线终点所对应的路线,避免重复搜索;BFS的队列中存储一维数组node,node[0]:最后一个节点,node[1]:路线对应的整数【在这里将路线压缩成一个整数,原理是使用二进制...

2019-10-13 06:55:57 368

原创 LeetCode 1057 Campus Bikes

思路、思路:使用priority queue并且重写比较器,(o1,o2):当需要递增/最小堆时,o1<o2:-1;递减/最大堆时,o1-o2:1. 然后根据给出的条件构造每一个Triple然后将其放入pq中。然后在填写result数组时,要先判断poll出来的worker和bike有没有被用过,用过就直接continue,可以使用2个boolean数组来进行判断。时间复杂度O(NM l...

2019-10-11 12:31:12 971

原创 LeetCode 51 N-Queens

思路dfs搜索,其实是排列型搜索permutation。利用一个List来存每一列上存了什么数字,索引就是行数,可以保证每一行只有一个数字。搜索部分就是permutation模板实现,只是模板中的visit判断放入判断是否相互攻击的函数中了。判断是否不会相互攻击:(1)每行只有一个:通过list索引自动解决(2)每列只有一个:搜索所有已经存进list中的index是否与将加入的index重...

2019-10-08 14:00:09 118

原创 LintCode 10 String Permutation II

思路与Permutation的思路类似,使用与subsets II相同的去重思路。DFS搜索。时间复杂度O(n!)空间复杂度O(n)代码public class Solution { /** * @param str: A string * @return: all permutations */ public List<String&...

2019-10-08 10:53:29 196

原创 LeetCode 10 Regular Expression Matching

思路记忆化搜索。与LC 44 的解法几乎一致,有几个细节需要修改。(1)当s到达末尾时,需要p的内容为aa的模式而不是全部的*(2)需要判断pIndex+1位置是否为*,而不是pIndex处,因为* 是来匹配前一个字符的;并且此处的行为:(sIndex, pIndex + 2)对应*匹配sIndex 0次,charMatch(sc, pc) && (sIndex + 1,...

2019-10-06 14:15:04 91

原创 LeetCode 44 Wildcard Matching

思路思路:记忆化搜索/dp,使用一个visited数组记录memo中某一个元素是否被访问过即是否被加入memo。由于可以匹配任意数量的字符(包括0个),所以(1)当pattern中当前位置pIndex处为时,有2种情况:source中匹配0个或者>=1个,对应下一个搜索状态就是(sIndex, pIndex + 1)和(sIndex + 1, pIndex),二者满足一个即可; (2)当...

2019-10-02 12:37:22 96

原创 LintCode 136 / LeetCode 131 Palindrome Partitioning

思路dfs搜索。具体思路和组合型dfs模板几乎一致,然后每次搜索到一个新字符串时先判断是否为回文串;但是这里需要一些优化。优化1:可以对回文串检测预处理一下,现将所有可能的回文串结果保存到一个isPalindrome数组里,然后检测的时候就可以直接调用了,这里使用动态规划(区间型)的方式进行处理;优化2:在将合理的答案加入list时,不是直接截取子串然后放入list,而是先将子串结尾下标放入...

2019-09-16 13:31:29 161

原创 LintCode 680 Split String

思路dfs搜索问题,可以使用subset的模板,只是dfs中for循环条件有所改变,因为可以接受连续的最多2个字符作为子串。时间复杂度O(2^n)空间复杂度O(logn)代码public class Solution { /* * @param : a string to be split * @return: all possible split strin...

2019-09-16 08:07:51 298

原创 LintCode 90 K Sum II

思路dfs搜索,与Combination Sum的区别是多了一个限制:每个答案的长度为k。对于这种问题,只需要在dfs的传入参数列表中增加这个限制,并且相应修改递归出口。时间复杂度O(2^n)空间复杂度O(logn)代码public class Solution { /* * @param A: an integer array * @param k: a p...

2019-09-16 06:34:13 180

原创 LintCode 153 Combination Sum II

思路与combination sum思路基本一致,由于一个数字不能被重复使用,所以需要像Subsets II那题一样去重。时间复杂度O(2^n)空间复杂度O(logn)代码public class Solution { /** * @param num: Given the candidate numbers * @param target: Given th...

2019-09-16 00:44:22 106

原创 LintCode 135 Combination Sum

思路与subsets的思路几乎一致,只是在递归出口条件和dfs的输入参数有一点不同。本题需要额外对输入数组进行去重,思路参考LintCode 521的思路(双指针去重)。复杂度时间复杂度O(2^n)空间复杂度O(logn)代码public class Solution { /** * @param candidates: A list of integers ...

2019-09-15 14:41:41 150

原创 LintCode 18 Subsets II

思路跟Subsets的思路几乎一样,只是增加了一个去重。去重思路:排序之后的数组可以是[1,2,2],这样假设nums[i] == nums[i-1]并且i > startIndex(说明i和startIndex之间隔着至少一个数字),这样两个条件和到一起就说明是前面有个一样的数字没有被使用,于是需要跳过该情况。时间复杂度O(2^n)空间复杂度O(logn)代码public cla...

2019-09-15 13:04:23 89

原创 LintCode 17 Subsets

思路排列组合搜索,使用dfs解决。注意该题目与leetcode 78不同的一点是:每个结果中的数字必须是升序的,于是需要先对数组排序。复杂度时间复杂度O(nlogn)空间复杂度O(logn)代码public class Solution { /** * @param nums: A set of numbers * @return: A list of li...

2019-09-15 07:32:39 100

原创 LeetCode 1007 Minimum Domino Rotations For Equal Row

思路只存在三种情况:相同的数是A[0]/B[0]/null。然后分别将A[0],B[0]作为target,同时遍历A和B数组。如果位置i的A和B的值与A[0],B[0]都不等,那么说明不可能完成该任务;否则相应的rotationA++或者rotationB++。最后取一个最小值(贪心)返回即可。复杂度时间复杂度O(n)空间复杂度O(1)代码class Solution { pu...

2019-09-13 13:49:07 177

原创 LintCode 521 Remove Duplicate Numbers in Array

思路1HashSet记录不重复数字,然后从数组开头开始替换成hashset中的元素。时间复杂度O(n)空间复杂度O(n)代码1public class Solution { /** * @param nums an array of integers * @return the number of unique integers */ pub...

2019-09-12 10:26:16 225

原创 LintCode 5 / LeetCode 215 Kth Largest Element

思路quick select / partition(二者是一个东西)复杂度时间复杂度O(n)空间复杂度O(n)代码public class Solution { /** * @param n: An integer * @param nums: An array * @return: the Kth largest element */...

2019-09-10 12:47:06 141

原创 LintCode 464 Sort Integers II

思路快排练习,不多说复杂度时间复杂度:平均O(nlogn),最坏O(n^2)空间复杂度:平均O(logn),最坏O(n)代码public class Solution { /** * @param A: an integer array * @return: nothing */ public void sortIntegers2(int[...

2019-09-10 11:35:24 133

原创 LintCode 31 Partition Array

思路双指针。左右两个指针,首先分别从左边寻找大于k的第一个数,从右边寻找小于k的第一个数,然后交换。重复此过程,直到left>right。注意,在这里的循环条件是left<=right,目的是让循环结束后数组的划分更加清晰,可以直接返回left,而不需要在循环外面再写另外的判断条件。复杂度时间复杂度O(n)空间复杂度O(1)代码public class Solution {...

2019-09-09 14:03:07 131

原创 LintCode 587 Two Sum - Unique pairs

思路1排序+双指针。指针移动的过程中,遇到了相同的元素就直接跳过。时间复杂度O(nlogn)空间复杂度O(1)代码1public class Solution { /** * @param nums: an array of integer * @param target: An integer * @return: An integer ...

2019-09-09 10:03:22 294

原创 LeetCode 170 Two Sum III - Data structure design

思路 + 复杂度用一个hashmap存数字及其出现的次数,用一个list存出现的数字(不重复的)。add:将元素存入hashmap和list。时间复杂度O(1),空间复杂度O(1)find:遍历list,依次在map中寻找list中的每个数字能否组成一个要求的和。假设找到的num1和num2相等,还需要判断它是否出现了>=2次。时间复杂度O(n),空间复杂度(1)代码class Tw...

2019-09-09 05:05:23 133

原创 LeetCode 881 Boats to Save People

思路贪心+双指针。将数组排序后,两个指针分别指向最轻的和最重的两个人。如果二者之和超过limit,那么只能让最重的人上船;否则二人可上一艘船。复杂度时间复杂度O(n)空间复杂度O(1)代码class Solution { public int numRescueBoats(int[] people, int limit) { Arrays.sort(people...

2019-09-05 15:04:22 114

原创 LeetCode 221 Maximal Square

思路dp解法。dp[i][j]表示以(i, j)为右下角的正方形的最大边长;状态转移方程:dp[i][j] = min(dp[i-1][j-1], dp[i][j-1], dp[i-1][j]) + 1;初始状态:i == 0 || j == 0, dp[i][j] = matrix[i][j].复杂度时间复杂度O(n*m) = O(n^2)空间复杂度O(n*m) = O(n^2)代...

2019-09-03 13:59:45 96

原创 LintCode 578 Lowest Common Ancestor III

思路基本与LCA那题类似,判断树根和子树,只是需要额外保存A,B节点是否在node的子树中存在的信息。使用ResultType来保存该信息。复杂度时间复杂度O(n)空间复杂度O(n)代码/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNo...

2019-09-02 00:24:32 106

原创 LeetCode173 / LintCode 86 Binary Search Tree Iterator

思路next使用bst的迭代版中序遍历初始化和next基本组成了bst迭代版的中序遍历复杂度hasNext, next时间复杂度O(1)空间复杂度O(1)代码/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, righ...

2019-08-29 23:09:36 117

原创 LeetCode 230 / LintCode 902 Kth Smallest Element in a BST

思路利用BST的性质,进行中序遍历可以得到一个非递减的序列。本题主要考察BST遍历的迭代写法。复杂度时间复杂度O(n)空间复杂度O(n)代码/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * ...

2019-08-29 13:45:50 117

原创 LintCode 596 Minimum Subtree

思路裸分治法。使用ResultType作为返回类型可以避免使用全局变量。复杂度时间复杂度O(n)空间复杂度O(logn)代码/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public T...

2019-08-21 14:53:30 211

原创 LeetCode 50 Pow(x, n)

思路快速幂。一个数的幂次可以转成二进制,从最右侧开始,遇到1就乘到结果里。基数x一直在做平方的运算。原理就是任何一个数都可以拆成1,2,4,8,…的和的形式。需要注意边界:当n小于0的时候,先把n转成-(n+1)【防止MIN_INT直接取相反数导致溢出】,然后在result开始的时候多乘一个x即可。有递归和非递归两种实现方式,代码在下面都贴出来了复杂度时间复杂度O(logn)空间复杂度O...

2019-08-19 11:27:02 71

原创 LC 162 Find Peak Element (LintCode 75 条件稍有不同)

思路主要讨论上坡、下坡和波峰。上坡:与后一个元素比较;下坡:与前一个元素比较;波峰:与左右都比较,可以直接作为最后一个情况,放到else里处理。注意前后比较的时候越界问题LintCode75 与这题几乎一样,只是条件有很小的差别。由于条件规定了前两个元素和后两个元素的大小关系,所以peak一定是在1~length-1之间的,于是就可以省去了index的合法性检查。时间复杂度和空间复杂度不变...

2019-08-18 15:36:04 117

原创 LintCode 585 Maximum Number in Mountain Sequence

思路二分法。同样是先建立ooxx的模型并且画一个图,用具体的例子进行尝试从而得到二分的条件。这里是判断mid和mid+1的大小关系来判断在那一段数据上(上升段/下降段)。复杂度时间复杂度O(logn)空间复杂度O(1)代码public class Solution { /** * @param nums: a mountain sequence which incre...

2019-08-18 08:52:15 150

原创 LeetCode 153 Find Minimum in Rotated Sorted Array

思路二分法。寻找第一个<=last number的点(不能找第一个</<=first number,可以举例子得到,<: 12345 = o x x x x;<=:45123 = x o x x x)。比如:4 5 1 2 3 || 1 2 3 4 5o o x x x || x x x x x复杂度时间复杂度O(logn)空间复杂度O(logn)代码...

2019-08-17 18:30:12 92

原创 LeetCode 658 Find K Closest Elements

思路二分查找。首先二分查找到最后一个<=target的位置,并将left设置为该位置,right为该位置+1,然后根据left和right与target的差值得到left和right指针移动的条件(left和right指针都指向下一个位置,可以从k的初始化看出来)。最后将[left+1, right-1]内的元素依次存入arraylist即可。时间复杂度O(logn+k)空间复杂度O(...

2019-08-15 16:33:44 181

原创 LeetCode 269 / LintCode 892 Alien Dictionary

思路【lintcode 892有一个条件不一样:遇到有多个顺序的时候,输出最小的那个】思路:拓扑排序。每个字母都是图中的一个节点,然后通过比较相邻的两个字符串得到具体两个字母的顺序【由于传递性,所以只需要比较相邻两个字符串】。可以使用优先队列来做拓扑排序,这样可以保证取到的顺序一直是最小的。时间复杂度O(naL+2mlogm), n-字符串个数,aL-单词平均长度,m-总字母个数。因为在to...

2019-08-10 18:21:21 471

原创 LintCode 611 Knight Shortest Path

思路BFS,带level信息的坐标型。每次将一层元素都取出来,然后加入队列的时候将其标记为1(障碍)。复杂度时间复杂度O(nm)空间复杂度O(nm)代码/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Po...

2019-07-29 15:22:47 215

原创 LintCode 433 Number of Islands

思路BFS, 从全图中所有为1的地方开始BFS,向4个方向进行搜索,在将起点加入queue的同时将其标记为0或者开一个visit数组标记已访问。复杂度时间复杂度O(n*m)空间复杂度O(n*m)代码class Coordinate { int x, y; public Coordinate(int x, int y) { this.x = x; ...

2019-07-28 11:39:41 158

原创 LeetCode 127 Word Ladder

思路隐式图BFS,每一个状态看作图中的每个节点。从起点开始BFS的同时记录level层数,方便返回结果。复杂度时间复杂度为O(n∗26l)O(n*26^l)O(n∗26l)空间复杂度为O(n)O(n)O(n)其中,n为字典大小,l为每个单词的长度代码public class Solution { /* * @param start: a string * ...

2019-07-19 15:21:42 187

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除