自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 不用乘除及取模操作实现两个整数的相除

问题描述就是简单的两句话:Divide two integers without using multiplication, division and mod operator. If it is overflow, return MAX_INT.题目分析先考虑最普通的情况,比如15/315/3,15=3∗515=3*5,答案为5,求解的过程并不能每次都减去一个3,知道remain小于等于0,这

2017-09-21 14:34:21 1338

原创 Chapter8 NP-complete problems 课后习题8.3

8.3 证明吝啬SAT是NP-完全问题吝啬SAT问题给定一组字句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值–如果该赋值存在。SAT问题(可满足性问题)SAT的一个实例:(x⋁y⋁z)(x⋁y¯)(y⋁z¯)(z⋁x¯)(x¯⋁y¯⋁z¯)(x \bigvee y \bigvee z )(x\bigvee \overline{y})(y\bigvee \ove

2017-06-24 21:06:52 525

原创 LEETCODE 153. Find Minimum in Rotated Sorted Array

题目内容题目给出一个数组,这个数组是将一个已经按升序排序好的数组,经过若干次循环移位得到的,我们要从中找到最小的值。解题思路对于这种在已经排序好的数组中找某个值,我们很容易想到的是二分搜索法。这道题也可以采用二分搜索来解决。二分搜索的过程中,我们会逐渐将搜索范围减半,如果我们可以保证每次减半之后,目标值都存在这个减半后的范围内,那么,当这个范围内剩下1个元素的时候,这个元素就是我们要的目标值。 假

2017-06-07 22:03:14 302

原创 LEETCODE 37. Sudoku Solver

题目大意是leetcode36的进阶版,要解出数独的答案 解题思路就是用递归,无奈太渣,弄错了边界条件,而且思路还不够清晰,递归函数返回类型一开始写成void了,导致board里面的内容总是被清空,后来改成bool,并在清空内容之前做一下判断。实现代码class Solution {public: void solveSudoku(vector<vector<char>>& board)

2017-06-04 23:02:22 284

原创 LEETCODE 36. Valid Sudoku

题目大意给出一个9*9的二维表格: 判断这个表格是不是有效的数独表格。解题思路一种解法: 用一个9维数组,存放每个数字是不是出现过,按列、行、小格遍历 另一种解法: 分别用三个数组,第一个数组放着某个数字在某一列是否出现过;第二个数组放着某个数字在某一行是否出现过;第三个数组放着某个数字在某一小格是否出现过。 第二种解法需要遍历表格一次而已,而第一种解法则需要遍历表格两次。实现第二种解

2017-05-23 21:55:52 254

原创 LEETCODE 77. Combinations

题目大意解题思路用递归的思路很简单,只需要将不重复的数字一次push进当前的vector就行,当vector的大小等于k的时候,就将结果记录下来。代码class Solution {public: vector<vector<int>> combine(int n, int k) { vector<vector<int>> resultVec; vector

2017-05-15 13:19:49 246

原创 LEETCODE 60. Permutation Sequence

题目大意解题思路直接在http://blog.csdn.net/chenyaxue/article/details/71330633 next permutation的基础上改就好了。代码class Solution {public: string getPermutation(int n, int k) { vector<int> numVec; for

2017-05-15 12:47:32 208

原创 LEETCODE 124. Binary Tree Maximum Path Sum

题目大意给出一棵二叉树,求出里面的每个节点加起来值最大的路径的和。解题思路解决这一题的思路主要是遍历每一个点i,计算以这个点为根节点,并经过这个点的路径和的最大值,记作pathSum(i),这个值可以用以下公式计算 maxSum(leftChild)+maxSum(rightChild)+valmaxSum(leftChild) + maxSum(rightChild) + val 其中ma

2017-05-12 21:22:18 205

原创 LEETCODE 47. Permutations II

题目大意给出一个数组,里面是n个数字,有可能会重复求出所有可能的且不重复的permutation。解题思路跟LeetCode46是一个问题,只是这里可能会出现重复,大题思路可以跟着LeetCode46 http://blog.csdn.net/chenyaxue/article/details/71614584 多加一个重复元素的判断就OK了。 重复元素的处理: 1. 首先需要将数组排个序

2017-05-11 18:25:00 214

原创 LEETCODE 46. Permutations

题目大意给出一个数组,里面是各不相等的数字,求出所有可能的permutation。 如: [1,2,3] [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]解题思路假设数组array={n1,

2017-05-11 14:53:00 264

原创 LEETCODE 31. Next Permutation

题目大意给出一个数组nums,求出nums的下一个permutation。 比如{1,2,3,4}\{1,2,3,4\},他的下一个permutation是{1,2,4,3}\{1,2,4,3\} 而且permutation会循环,如{4,3,2,1}\{4,3,2,1\},他的下一个permutation是{1,2,3,4}\{1,2,3,4\}解题思路给出一个数组,第一个permutatio

2017-05-07 15:09:33 241

原创 LEETCODE 62. Unique Paths LEETCODE 63. Unique Paths II

题目大意62题给出表格的大小,m是行数,n是列数,求从左上角到右下角可达路径的数量;63题在62题的基础上加上了obstacle的限制,需要处理的情况增加不少,需要注意。62题原题63题原题代码62题class Solution {public: int uniquePaths(int m, int n) { const int rowSize = m; c

2017-04-30 10:18:55 287

原创 LEETCODE 357. Count Numbers with Unique Digits

题目大意给出一个整数n,求在范围[0,10n)[0, 10^n)内每一位数都不相同的数字数目,如n=2时,返回91,除去{11,22,33,44,55,66,77,88,99}\{11,22,33,44,55,66,77,88,99\}这几个数字。解题思路将第n次迭代的结果与第n-1次迭代的结果联系起来,给一个例子帮助理解: 当n=3,求[0,1000)[0, 1000)里每一位数都不相同的数字数

2017-04-30 09:39:02 253

原创 leetcode 301. Remove Invalid Parentheses

题目大意给定一个字符串,可能会包括’(‘,’)’,和其他字符,得到所有合理的记过,实际上也就是左右括号匹配问题。 例子: “()())()” -> [“()()()”, “(())()”] “(a)())()” -> [“(a)()()”, “(a())()”] “)(” -> [“”]解题思路参考:https://discuss.leetcode.com/topic/34875/easy-

2017-04-23 17:43:07 551

原创 leecode 32. Longest Valid Parentheses

leecode 32. Longest Valid Parentheses题目大意给出一个只含有’(‘和’)’的字符串,求这个字符串里面最长的合理括号组合字符串的长度。解题思路一开始觉得会跟判断合法括号字符串一样,用一个stack就能解决,但是发现行不通,因为像”()(()”这种情况,没办法将前后的”()”分开。结果只是154 / 229 test cases passed

2017-04-16 21:26:00 290

原创 LEETCODE 45. Jump Game II

LEETCODE 45. Jump Game II题目大意给出一个正整数数组,每个元素代表当前位置所能跳转的最大步数,求能到达数组最后的的最少跳转次数,实际上是44题的一个变种,44题只是判断能否到达数组最后,本题多加一个要记录最少跳转次数的要求。 例如 A = [2,3,1,1,4] The minimum number of jumps to reach the last index is

2017-04-10 14:28:16 254

原创 LEETCODE 25. Reverse Nodes in k-Group

LEETCODE 25. Reverse Nodes in k-Group题目大意给出一个链表并给出一个正整数k,将链表中长度为k的子链表的节点顺序都弄反,其中k是小于等一链表长度的,如果最后那一段子链表长度不够k就不用管。 例如: Given this linked list: 1->2->3->4->5 For k = 2, you should return: 2->1->4->3->5

2017-04-09 15:02:54 221

原创 LEETCODE 24. Swap Nodes in Pairs

LEETCODE 24. Swap Nodes in Pairs题目大意题目很容易理解,将链表里面相邻的两个节点对调 例如: 1->2->3->4,对调完是2->1->4->3 1->2->3->4->5,对调完是2->1->4->3->5解题思路用常数空间实现,只需要加一个dummy node的空间,线性时间,用一个if-else处理单数和双数的情况。实现代码/** * Definitio

2017-04-09 14:05:25 199

原创 LEETCODE 55. Jump Game

LEETCODE 55. Jump Game贪心算法题目要求给出一个非负整数数组,每个元素代表在当前位置能往前跳的最大步数,判断能否跳到这个数组的最后。用一个例子理解:A = [2,3,1,1,4], return true. 元素 2 3 1 1 4 index 0 1 2 3 4就是说在index=0的时候,最大步数是2,index可以+0,+1,

2017-04-07 15:41:35 210

原创 leetcode 30. Substring with Concatenation of All Words

用sliding window来优化这个遍历过程。保证sliding window里面的单词都是候选词向量里面的词,而且每个候选词只能出现一次。这样的话当sliding window里面的大小与候选词向量的单词数相等的时候,就说明sliding window就是一种合理的答案。用一个哈希表记录候选词向量里每个词的个数,在遍历原字符串的时候,如果下一个单词是在候选词向量里面的,而且在slidin

2017-04-02 16:35:09 264

原创 leetcode 50. Pow(x, n)

将指数用以2为底的幂代表,如14=8+4+2=1110,则x^14 = x^(8 + 4 + 2) = x ^ 8 * x ^ 4 * x ^ 2,使每一轮迭代的底数翻倍,检查指数在当前迭代的指示值是否为1,为1的话说明结果有当前这个底数的因子,由于指数的位数就是log(N)。所以时间的复杂度就是O(log(N))。这里也要注意精度溢出的问题。class Solution {public:

2017-03-24 12:28:05 252

原创 leetcode 69. Sqrt(x)

简单地试了一下二分法,也要注意精度的问题class Solution {public: int mySqrt(int x) { int left = 0, right = x; while (left < right) { int mid = left + (right - left) / 2; // c

2017-03-24 10:09:41 251

原创 leetcode Contains Duplicate系列问题,哈希表,红黑树,二叉查找树

首先第一题leetcode 217 contains duplicate是要在一组正整数里面找出重复的那一个,可以构造一个哈希表来查找,也可以构造二叉查找树来查找,哈希表查找的时间效率比二叉查找树好,但是二叉查找树的空间效率比哈希表好,都可以试试。基于哈希表的可以用unordered_set,基于红黑树(一种平衡二叉查找树)的可以用set。class Solution {public:

2017-03-22 14:57:49 639

原创 leetcode Course Schedule系列问题,拓补排序,有向无环图

能进行拓补排序的图必须是有向无环图,直接用DFS判断图里面是否存在环,即不能存在回边,用两个时钟数组记录每个节点的进入时钟pre和返回时钟post,回边有这样的特性,如果一条边(u,v)是一条回边,那么pre(u)>pre(v),post(u)。class Solution {public: bool canFinish(int numCourses, vector>& prerequi

2017-03-22 09:54:53 469

原创 leetcode 310. Minimum Height Trees BFS,找无向连通图的直径

想要找到图里面的MHT,就要找出最长路径,最长路径的中点就是MHT的根,当最长路径的树节点个数是奇数的时候,MHT只有一棵,当最长路径的树节点个数是偶数的时候,MHT有两棵。找出无向连通图里面的直径,直径的中点就是所求的根,找出直径的方法使用两次BFS,第二次BFS还要记录下,路径中每个节点的父节点,第一次随意选择一个节点做BFS所能到达的最长路径的端点肯定是直径的一端,第二次再从这个直径的一端出

2017-03-14 15:19:21 1982

原创 leetcode 516. Longest Palindromic Subsequence

分两个关系,如果s[i]==s[j],table[i][j] = table[i+1][j-1]+2,如果s[i] != s[j],table[i][j] = max(table[i+1][j],table[i][j-1]。边界条件i==j,只有一个字符,table[i][j]=1,i+1==j,只有两个字符,table[i][j]=s[i]==s[j]?2:1。class S

2017-03-13 12:45:57 354

原创 leetcode 336. Palindrome Pairs

一开始的思路就是遍历所有的pair,判断这个pair拼接起来是不是回文串,首先,还是拿例子说明["abcd", "dcba", "lls", "s", "sssll"] 答案:[[0, 1], [1, 0], [3, 2], [2, 4]]。当我遍历到i=2,j=4的时候,即words[i] = "lls",words[j] = "sssll",由于words[i] = "lls"的长度是小于

2017-03-12 21:33:24 264

原创 Combination Sum系列问题

这系列一共有四个问题问题一:给出一个没有重复数字的候选集C,给出一个和T,在候选集里面找出所有和为T的组合,C里面的数字可以选择无数次。(里面的所有数字都是正整数)问题二:给出一个可能有重复数字的候选集C,给出一个和T,在候选集里面找出所有和为T的组合,C里面的数字只可以选择一次。(里面的所有数字都是正整数)问题三:给出一个数字n,和个数k,找出k个1-9的数的和是n的所有组合问题

2017-03-12 01:05:07 357

原创 leetcode 99. Recover Binary Search Tree 二叉树非递归遍历,利用stack和morris遍历

一开始觉得就按照二叉搜索树的构造规则由上至下,遇到违反大小规则的节点就直接交换这三个数的值就好了,知道遇到bad case:[3,null,2,null,1],产出结果[2,null,1,null,3],发现这种贪心的策略不work,看了一下tag是用深搜,想了想,从下至上也是一种贪心的策略,也不work的。后来看到讨论区给出in-order的解法,再看看题目,发现还真是巧,因为题目只说交换了两个

2017-03-10 16:49:16 404

原创 leetcode 214. Shortest Palindrome leetcode 5. Longest Palindromic Substring回文串相关

leetcode 214. Shortest Palindrome一看这道题第一反应就是先找出以str[0]为起点的最长的回文子串,然后,将这个回文子串后面的子串反转再拼接到前面。然后第一步,看看找最长回文子串有哪些方法。暴力搜索,复杂度O(N^2)。DP,复杂度也是O(N^2),看来这里用DP的可能性不大了呀。manacher’s algorithm,复杂度O(N),看来可行

2017-03-06 15:37:39 574

原创 leetcode 324. Wiggle Sort II

没想到这道题做了那么久啊,AC了真是神清气爽,又复习了一次快排。思路是,首先将数组用quickSelect部分排序,以median为界限,然后还是用三值排序的思路,得保证比median小的数都尽量排到从左到右的奇数位置,比median大的数都尽量排到从右到左的偶数位置,剩下的median自然就分好了位置。大致思路是这样,不过好多细节,提交了无数个版本,每次都有bad

2017-03-05 16:41:34 435

原创 leetcode 75. Sort Colors

三值排序问题:用三个指针跟踪 top_bottom:第三个分区的下界,这个指针往后都是第三个分区的值; bottom_top:第一个分区的上界,这个指针往前都是第一个分区的值,这个指针和middle_top之间的都是第二个分区的值; middle_top:第二个分区的上界,这个指针和top_bottom之间的元素都是待排序的。 思路挺像快排的。class Solut

2017-03-04 20:09:19 235

原创 leetcode 91. Decode Ways

DP: 用一维的table记录,table[i]代表数至字符串第i个字符最多的decode ways, 所以table[i]是根据当前观察的数字和table[i-1],table[i-2]的值决定的。 如果当前table[i-1~i]是一个合法的两位数,而且table[i]是一个合法的1位数, 那么table[i]=table[i-2]+table[i-1];如

2017-03-02 11:42:36 197

原创 leetcode 375. Guess Number Higher or Lower II

class Solution {public: int getMoneyAmount(int n) { const int tableSize = n; int table[tableSize][tableSize]; for (int i = n - 1; i >= 0; i--) { for (int j = i

2017-03-01 13:18:12 204

原创 leetcode 278. First Bad Version

很简单的二分搜索的题目,但是提交得时候在一个case:2126753390 versions 1702766719 is the first bad version TLE了。原因是求中位数的时候公式使用得不恰当。或者将int改成long long int。//int mid = (leftInd + rightInd) / 2; 会溢出int mid = leftIn

2017-03-01 09:47:35 514

原创 leetcode 204. Count Primes

学到一种新的方法Sieve of Eratosthenes,非常surprise, leetcode上面已经把这个算法说的很清楚了,不过感觉算时间 复杂度还是有点复杂的,O(NLOGLOGN) 链接:https://leetcode.com/problems/count-primes/?tab=Descriptionclass Solution {public:

2017-02-27 15:14:31 209

原创 leetcode 313. Super Ugly Number

思路跟264. Ugly Number II一样,不过264. Ugly Number II里面求丑数的时候 用到的基地只有2,3,5三个,而这里提供一个素数数组,数组长度为k,k最大是100, 所以264. Ugly Number II用的是三个数来记录最小值和下标,这里要用一个数组来记录下标 和最小值。 这里每找一个数都要遍历一次长度为k的列表,用最小堆会使复杂

2017-02-27 14:17:46 436

原创 leetcode 264. Ugly Number II

参考博客:http://www.cnblogs.com/grandyang/p/4743837.html 根绝题目提示,无须每个整数都判断一下是否是丑数,因为大部分的数都不是丑数, 所以只关注那些丑数是如何递归构造的就可以了,后面的丑数都是前面的丑数*2或 *3或*5所得的,现在只要正确地把这些丑数排好序就可以了。可以用归并排序的思路, 有三个子序列,分别是丑数*2

2017-02-27 12:36:23 253

原创 leetcode 23. Merge k Sorted Lists

* 相当于归并排序的归并部分,参考讲解:https://www.youtube.com/watch?v=6bvnZzwiKzs 有k个有序的链表,假设每个链表的长度为n,将这k个链表合并成一个 有序链表。 一种方法是,直接拼接这k个链表后再排序,复杂度是O(KN*LOG(KN)); 另一种方法是,每次在k个链表中选出排在第一的最小的元素,如此下去, 复杂度是

2017-02-26 16:21:35 313

原创 leetcode 142. Linked List Cycle II

思路跟leetcode 287. Find the Duplicate Number, leetcode 141. Linked List Cycle一样,都是用Floyd's Algorithm 的龟兔赛跑解决,这里与141题对比还需要第二次相遇的结果, 第一次相遇就说明有环,如果都到末尾了还不相遇就说明没有环。第二次 相遇的节点就是环的起点。struct

2017-02-26 14:48:31 210

空空如也

空空如也

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

TA关注的人

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