算法
zhsenl
这个作者很懒,什么都没留下…
展开
-
Leetcode 动态规划 Minimum Path Sum
题意:给定一个 m * n 的网格,网格中有非负的数字。一个机器人要从左上角走到右下角,每次只能向下或向右移动一个位置,找出一条总和最小的路径,返回最小值思路1:记忆化搜索使用一个两维 minPathSums[i][j]记录 (i,j)到(m,n)的总和最小的路径的值然后使用dfs 枚举复杂度:时间O(2^n) 空间O(n)思路2:dp设置状态为f[i][j],表示到达网格(i,j)的总和最小的路径的值,则状态转移方程为f[i][j] = min(f[i - 1][j] + f[i][原创 2014-08-30 13:14:18 · 786 阅读 · 1 评论 -
Leetcode 线性表 Remove Duplicates from Sorted List
题意:去掉已排序的链表里重复的元素思路:1.遍历链表,用一个变量保存当前链表节点的值2.如果当前链表节点值与前面的一样,则删除当前链表节点3.否则用当前节点值更新该变量复杂度:时间O(n), 空间O(1)原创 2014-05-14 10:16:45 · 742 阅读 · 0 评论 -
Leetcode 二分查找 Search a 2D Matrix
题意:在一个二维矩阵中找到给定的值。矩阵从上到下从左到右有序思路:二维空间的二分查找 先在一维里找中间位置,再将该位置转为二维空间里的下标注:下标比较难弄,得注意点复杂度: 时间O(log n),空间O(1)相关题目:Search Insert Position原创 2014-05-14 09:47:15 · 846 阅读 · 0 评论 -
Leetcode 线性表 Remove Element
题意:移除数组中出现的给定元素,并返回移除元素数组长度。要求在数组上操作思路:遍历数组,将除给定元素外的其他元素赋值给“新数组”,不过这个“新数组”还是在原来的“旧数组”的内存空间因为遍历旧数组的下标总大于等于新数组的下标,所以赋值并不会影响到还没有遍历到的元素复杂度:时间O(n), 空间O(1)原创 2014-05-14 14:24:39 · 709 阅读 · 0 评论 -
Leetcode 线性表 Remove Duplicates from Sorted List II
题意:将已排序的链表中所有重复的元素移除思路:三个个指针,pre, cur, next一个布尔变量is_appear,表示cur指针指向的值之前是否已经出现过检查cur, next指向的节点的值是否相同,相同的话,删除cur不同的话,如果is_appear为true,删除cur,否则不删除删除的话,只移动cur, next指针不删除的话,要移动pre, cur, next三个指针复杂度:时间O(n),空间O(1)原创 2014-05-14 14:21:34 · 605 阅读 · 0 评论 -
Leetcode 线性表 Remove Duplicates from Sorted Array II
题意:从一个已排序的数组中移除掉重复的元素,每个元素最多可重复两次思路: 思路和Remove Duplicates from Sorted Array一样,不过要设置一个计数变量,表示当前值出现的次数出现次数少于2可以加入到新数组,多于2则不可以。每次遇到一个新变量要把计数变量重新设置为1,加入新数组要加1 复杂度:时间O(n), 空间O(1)原创 2014-05-14 10:54:44 · 616 阅读 · 0 评论 -
Leetcode 二分查找 Search Insert Position
题意:输出一个元素在一个已排序的数组中的位置,如果不存在输出它应该插入的位置思路:二分查找,如果找到就输出位置,找不到就输出它应该插入的位置复杂度:时间O(log n),空间O(1) 相关题目:Search for a RangeSearch a 2D Matrix原创 2014-05-13 22:28:51 · 933 阅读 · 0 评论 -
Leetcode 树 Populating Next Right Pointers in Each Node
题意:给定一棵perfect binary tree,将它每一个节点的next指针都指向该节点右边的节点思路:dfs在connect一棵树的时候,需要知道这棵树的根节点和它右边的节点1.将树的根节点和它右边的节点连接起来2.递归地将左子树connect起来,需要知道左子树节点和右子树节点3.递归地将右子树connect起来,需要知道右子树节点和根右边的节点的左子树节点递归函数为:void connect(TreeLinkNode *root, TreeLinkNode *sibling)表原创 2014-05-13 21:15:25 · 726 阅读 · 0 评论 -
Leetcode 树 Binary Tree Preorder Traversal
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieBinary Tree Preorder Traversal Total Accepted: 17948 Total Submissions: 51578Given a binary tree, return the preorder tra原创 2014-05-13 16:50:14 · 702 阅读 · 0 评论 -
Leetcode 树 Unique Binary Search TreesII
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieUnique Binary Search Trees II Total Accepted: 7349 Total Submissions: 27648Given n, generate all structurally unique原创 2014-05-13 16:17:57 · 593 阅读 · 0 评论 -
Leetcode 树 Populating Next Right Pointers in Each Node II
题意:给定一棵任意二叉树(不一定是perfect binary tree),将它每一个节点的next指针都指向该节点右边的节点思路:bfs这里不能用dfs了,只能用bfsbfs遍历将同一层的节点存放在同一个数组里,然后在遍历每个数组,将前面的节点和后面的节点connect起来,最后一个节点和NULL connect起来需要定义一个新的struct结构,保存指向每个节点的指针和该节点所在的层复杂度:时间O(n), 空间O( n)原创 2014-05-13 22:19:44 · 1322 阅读 · 0 评论 -
Leetcode 树 Binary Tree Level Order Traversal II
题意:从底往上按层遍历二叉树思路:思路和Binary Tree Level Order Traveral 一样,即从上往下按层遍历二叉树,将每一层的节点存放到该层对应的数组中最后将得到的数组倒转一下就可以了按层遍历二叉树可用bfs,也可用dfs,但都要记录节点所在的层复杂度:时间O(n), 空间O(n)原创 2014-05-13 20:28:29 · 1052 阅读 · 0 评论 -
Leetcode 树 Binary Tree Zigzag Level Order Traversal
题意:给定一棵二叉树,返回按zigzag层次遍历的结果思路:还是跟前面的Binary Tree Level Order Traversal的思路一样即从上往下按层遍历二叉树,将每一层的节点存放到该层对应的数组中最后将得到的总数组中奇数层(从0层开始计数)的子数组reverse一下就可以了复杂度:时间O(n),空间O(n)原创 2014-05-13 20:54:47 · 1250 阅读 · 0 评论 -
Leetcode 线性表 Linked List Cycle
题意:判断一个链表中是否有环思路:快慢指针,如果有环,最终快慢指针会在非NULL相遇注:用到fast->next前先要确保fast非NULL,要用fast->next->next前先要确保fast,fast->next非NULL复杂度:时间O(n), 空间O(1)相关题目:Linked List CycleII原创 2014-05-13 16:34:14 · 676 阅读 · 0 评论 -
Leetcode 树 Binary Tree Level Order Traversal
题意:给定一棵二叉树,返回按层遍历的结果思路1:bfs,定义一个新的struct,记录指针向节点的指针和每个节点所在的层复杂度1:时间O(n),空间O(n)思路2:dfs递归函数:void levelOrder(TreeNode *root, int level, vector<vector<int> >&result)表示把根为root的树按层存放在result中,其中level表示当前的层数复杂度2:时间O(n),空间O(n)相关题目:原创 2014-05-13 17:42:13 · 849 阅读 · 0 评论 -
Leetcode 树 Unique Binary Search Trees
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieUnique Binary Search Trees Total Accepted: 13478 Total Submissions: 37858Given n, how many structurally unique BST's (bin原创 2014-05-12 22:32:53 · 847 阅读 · 0 评论 -
Leetcode 贪心 Best Time to Buy and Sell Stock
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieBest Time to Buy and Sell Stock Total Accepted: 13234 Total Submissions: 43145Say you have an array for which the ith ele原创 2014-05-12 17:57:21 · 821 阅读 · 0 评论 -
Leetcode 线性表 Remove Duplicates from Sorted Array
题意:从一个已排序的数组中移除掉重复的元素思路:用下标i扫描旧数组,用下标j来保存新数组的尾部如果旧数组的当前元素与新数组的最后一个元素相同,则继续扫描旧数组如果不同,新数组的下标前移一们,将旧数组的当前元素赋给新数组,继续扫描旧数组相关题目:Remove ElementRemove Duplicates from Sorted ListRemove Duplicates from Sorted List II原创 2014-05-14 10:13:40 · 676 阅读 · 0 评论 -
Leetcode 动态规划 Decode Ways
题意:将A-B编码为1-26,现在给一串数字,问有多少种解码方式思路:动态规划设f[i]表示以第i个字符结尾的数字串的解码方式,则如果 s[i - 2]是1 或 s[i - 2]是2且s[i - 1]小于6,f[i] = f[i - 1] + f[i - 2] 否则,f[i] = f[i - 1]此外,还要再加一些判断如果s[i - 1]是零,则以s[i - 2]数字结尾的解码方式为零。因为s[i - 2]数字必须和s[i - 1]结合起来实现的时候只要两个变量保存前两个的值,即f[i - 1原创 2014-05-14 17:41:31 · 850 阅读 · 0 评论 -
Leetcode 线性表 Swap Nodes in Pairs
题意:交换给定链表中的相邻节点,但不可以改变链表里的值如1->2->3->4交换后为2->1->4->3思路:按题意中的扫描去改变每两个相邻节点的next指针的指向即可。小技巧:因为处理每两个相邻节点的时候,需要一个指针记录它们前一个节点,而头节点前面没有节点,所以可设置一个dummy节点指向头指针,这样开头的两个节点的处理方式跟其它的相邻节点的处理方式就一样了复杂度:时间O(n),空间O(1)原创 2014-05-14 22:36:27 · 726 阅读 · 0 评论 -
Leetcode dfs Subsets
题意:给定一个元素为不同整数的集合,返回集合的所有子集。思路1:dfs暴力枚举每一个元素,都有两种选择,选或不选,如下所示 元素1 选/ \不选 元素2 选/ \不选用dfs遍历这棵树,记录下路径当遍历到叶子节点的时候,就把路径添加到结果中去实现:用递归实现。void subsets(vector<int> S, vector<int> path, int step, vector<vector<int> >result)表示前面部分的路径是path,将S从原创 2014-05-15 10:52:28 · 727 阅读 · 0 评论 -
Leetcode 细节实现题 Spiral Matrix II
Spiral Matrix II Total Accepted: 12773 Total Submissions: 41526My SubmissionsGiven an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.For exampl原创 2014-08-31 17:03:27 · 689 阅读 · 0 评论 -
Leetcode 细节实现题 Spiral Matrix
Spiral Matrix Total Accepted: 12721 Total Submissions: 62094My SubmissionsGiven a matrix of m x n elements (m rows, n columns), return all elements of the matrix in spiral order.For ex原创 2014-08-31 16:29:30 · 697 阅读 · 0 评论 -
Leetcode 贪心 container with most water
题意:二维坐标系里有 n 个点 (i, ai), ai >= 0,从 (i, ai)到(i, 0)划竖线,共有 n 条竖线。找出两条竖线,使得它们构成的矩形的面积最大,矩形的高取决于最短的竖线。思路:贪心从首尾两个下标head 和trail 处开始扫描,用一个变量 maxArea 保持当前最大的矩形面积。如果head 指向的竖线短于 trail 的,则右移 head否则左移 trail计算面积,更新 maxArea复杂度:时间O(n),空间O(1)int maxArea(vector<in原创 2014-08-30 16:00:14 · 831 阅读 · 0 评论 -
Leetcode 细节实现 Rotate Image
题意:给定一个 n * n 的二维图像,将该图像顺时针旋转 90 度思路:先沿副对角线翻转一次,再沿水平中线翻转一次复杂度:时间O(n^2),空间O(1)void rotate(vector<vector<int> > &matrix){ int n = matrix.size(); //沿副对角线翻转 for(int i = 0; i < n; ++i){ for(int j = 0; j < n - i; ++j){ int i2 = n - 1 - j, j2 = n -原创 2014-08-30 15:29:41 · 716 阅读 · 0 评论 -
Leetcode 链表 Linked List Cycle II
题意:给定一个单链表,判断该链表中是否存在环,如果存在,返回环开始的节点思路:1.定义两个指针,快指针fast每次走两步,慢指针s每次走一次,如果它们在非尾结点处相遇,则说明存在环2.若存在环,设环的周长为r,相遇时,慢指针走了 slow步,快指针走了 2s步,快指针在环内已经走了 n环,则有等式 2s = s + nr => s = nr3.在相遇的时候,另设一个每次走一步的慢指针slow2从链表开头往前走。因为 s = nr,所以两个慢指针会在环的开始点相遇复杂度:时间O(n)struct原创 2014-08-30 23:04:02 · 686 阅读 · 0 评论 -
Leetcode 动态规划 Unique Paths
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieUnique Paths Total Accepted: 17915 Total Submissions: 57061My SubmissionsA robot is located at the top-left corner of a m原创 2014-08-29 11:23:49 · 837 阅读 · 0 评论 -
Leetcode 高精度 Plus One
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenliePlus One Total Accepted: 17614 Total Submissions: 55852My SubmissionsGiven a non-negative number represented as an array原创 2014-08-29 01:58:01 · 1090 阅读 · 3 评论 -
Leetcode 动态规划 Unique Paths II
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieUnique Paths II Total Accepted: 13655 Total Submissions: 49081My SubmissionsFollow up for "Unique Paths":Now consider i原创 2014-08-29 14:46:47 · 691 阅读 · 0 评论 -
Leetcode 动态规划 Trapping Rain Water
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieTrapping Rain Water Total Accepted: 14568 Total Submissions: 50810My SubmissionsGiven n non-negative integers representin原创 2014-08-29 01:15:02 · 1264 阅读 · 0 评论 -
Leetcode 动态规划 Candy
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieCandy Total Accepted: 16494 Total Submissions: 87468My SubmissionsThere are N children standing in a line. Each child is原创 2014-08-29 01:28:36 · 1567 阅读 · 0 评论 -
Leetcode 动态规划 Maximum Subarray
题意:最大连续子序列和,在一个数组中找到和最大的连续子数组思路:dp, 对于第i个数,有两种选择:把它加入在子数组里,不加入子数组(子数组到此结束)加不加入子数组,要比较它加入前后子数组的总和是变大了还是变小了,如果变大则加入,变小则不加入所以,我们需要记录以i-1结尾的子数组的总和,最后的结果在这些总和中取最大的那个f[i] = max(f[i-1]+a[i],f[i-1]);max({f[i]})实现时用两个变量,一个保存f[i-1],一个保存目前为止最大的f[i]复杂度:时间O(n),空原创 2014-05-14 17:51:16 · 1021 阅读 · 0 评论 -
Leetcode 细节实现 Pascal's Triangle II
题意:题意:给定数字rowIndex,返回杨辉三角的第rowIndex行思路:按杨辉三角的定义生成rowIndex+1行杨辉,然后返回第rowIndex行即可复杂度:时间O(n^2),空间O(n^2)原创 2014-05-14 20:24:19 · 670 阅读 · 0 评论 -
Leetcode 线性表 Merge Sorted Array
题意:两个有序数组A、B,把它们合成一个有序数组存放在数组A上思路:归并排序中的合并步骤。从头往前合并两个数据。A的大小是m,B的大小是n,合并后A的大小是m+n。设三个下标i,j,k,开始时分别指向A的m-1位置,m+n-1位置和B的n-1位置i,j分别向数组A,B的前面扫描,每次扫描比较A[i]和B[j]的大小,将大小的赋值给A[k],同时k--当i,j小于0时,停止扫描,把下标不小于0的那个数组复制到A中去(如果是A自己就不用复制了)原创 2014-05-14 18:09:05 · 657 阅读 · 0 评论 -
Leetcode 线性表 Remove Nth Node From End of List
题意:移除链表的倒数第n个元素思路:两个指针p, q,p先走n步,然后p,q一起走,当p走到尾的时候,q->next就是要删除的节点复杂度: 时间O(n),空间O(1)原创 2014-05-14 15:17:11 · 757 阅读 · 0 评论 -
Leetcode 线性表 数 Add Two Numbers
题意:给定两个代表数字的链表,每个节点里存放一个digit,数字是逆方向的,将这两个链表相加起来思路:1.i, j遍历l1,l2至最长,短的补零2..设置一个进位变量c, 第i次遍历 l1,l2,c的和除以10进位,mod10留在这一位3.出循环后还要检查是不是还有进位复杂度:O(m+n), 空间O(m+n)原创 2014-05-15 10:02:56 · 711 阅读 · 0 评论 -
Leetcode 线性表 Merge k Sorted Lists
题意:将k个已排好序的链接合并成一个有序链表思路:利用Merge Two Sorted Lists的代码两条两条地合并链表复杂度:时间O(k*n), 空间O(1)原创 2014-05-14 20:05:17 · 477 阅读 · 0 评论 -
Leetcode 树 Binary Tree Postorder Traversal
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie原创 2014-05-13 16:58:29 · 647 阅读 · 0 评论 -
Leetcode 贪心 Best Time to Buy and Sell StockII
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlieBest Time to Buy and Sell Stock II Total Accepted: 13030 Total Submissions: 36467Say you have an array for which the ith原创 2014-05-12 20:35:30 · 683 阅读 · 0 评论 -
Leetcode 树 Binary Tree Inorder Traversal
题意:中序遍历思路:采用递归实现。因为函数声明是返回一个vector<int>,所以每个子树返回的是该子树的中序遍历的结果按照 左、根、右的次序把根和左右子树的vector合并起来就可以了原创 2014-05-13 16:43:55 · 814 阅读 · 0 评论