algorithm
ssevenstar
这个作者很懒,什么都没留下…
展开
-
344. Reverse String
344. Reverse Stringcode:char* reverseString(char* s) {char *p1, *p2;if (!s || !*s) return s;for (p1 = s, p2 = s+strlen(s)-1; p1 < p2; p1++, p2--) { *p1 ^= *p2; *p2 ^= *p1; *p1 ^= *p2原创 2017-03-21 00:09:00 · 140 阅读 · 0 评论 -
1002. 等价二叉树
1002. 等价二叉树Description两个二叉树结构相同,且对应结点的值相同,我们称这两个二叉树等价./** Definition for a binary tree node. struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : va原创 2017-06-29 16:55:55 · 207 阅读 · 0 评论 -
1003. 相连的1
对于一个01矩阵A,求其中有多少片连成一片的1. 每个1可以和上下左右的1相连.思路:泛洪(DFS)class Solution {public: void flood(vector<vector<char>>& A, int i, int j, int m, int n) { if (i < m && i >= 0 && j < n && j >= 0 && A[i][j原创 2017-06-29 17:06:31 · 159 阅读 · 0 评论 -
1004. 无环图
在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图(Directed Acyclic Graph,DAG). 对于一个n个节点的有向图(节点编号从0到n-1),请判断其是否为有向无环图.图的节点数和边数均不多于100000.请为下面的Solution类实现解决上述问题的isDAG函数,函数参数中n为图的节点数,edges是边集,edges[i]表示第i条边从ed原创 2017-06-29 17:10:42 · 234 阅读 · 0 评论 -
1005. 最大和
从数列A[0], A[1], A[2], …, A[N-1]中选若干个数,要求相邻的数不能都选,也就是说如果选了A[i], 就不能选A[i-1]和A[i+1]. 求能选出的最大和.1 <= N <= 100000, 1 <= A[i] <= 1000例1:A = {2, 5, 2},答案为5.例2:A = {2, 5, 4},答案为6.思路:动态规划class Solution {public:原创 2017-06-29 17:14:40 · 249 阅读 · 0 评论 -
1006. 编辑距离
对于两个只含有小写英文字母(’a’-‘z’)的单词word1和word2,你可以对word1进行以下3种操作:1) 插入一个字母; 2) 删除一个字母; 3) 替换一个字母.请计算将word1变换成word2的最少操作数. word1和word2的长度均不大于1000.例1:word1 = “sunny”, word2 = “snowy”,返回值为3. 例2:word1 = “abc”,原创 2017-06-29 17:16:32 · 197 阅读 · 0 评论 -
70. Climbing Stairs
70. Climbing Stairs问题: 每次上楼梯可以踏一阶梯或者两阶, 问有多少中上楼梯的方式.思路: 分析一下, 其实是个fabonacci数列问题. 上至第n阶的时候可以是踏一阶,或者踏两阶, 即f(n) = f(n-1)+f(n-2)code:class Solution {public: int climbStairs(int n) { if (n <原创 2017-06-11 21:34:41 · 168 阅读 · 0 评论 -
347. Top K Frequent Elements
347. Top K Frequent Elements思路: 先建立hash表统计出现的次数. 然后使用桶排序. 时间复杂度O(n)code:class Solution {public: vector<int> topKFrequent(vector<int>& nums, int k) { map<int, int> hash; for (int原创 2017-05-27 17:28:48 · 226 阅读 · 0 评论 -
21. Merge Two Sorted Lists
leetcode 21. Merge Two Sorted Lists思路:递归 code:#include <iostream>#include <vector>#include <string>#include <queue>using namespace std;/** * Definition for singly-linked list. * struct ListNode原创 2017-03-05 21:11:49 · 145 阅读 · 0 评论 -
23. Merge k Sorted Lists
leetcode 21. Merge Two Sorted Lists思路:divide and conquer,分治 code:#include <iostream>#include <vector>#include <string>#include <queue>using namespace std;/** * Definition for singly-linked list.原创 2017-03-05 21:16:42 · 144 阅读 · 0 评论 -
513. Find Bottom Left Tree Value
leetcode 513. Find Bottom Left Tree Value.cpp思路:使用队列,从右向左逐层遍历code:// Definition for a binary tree node.struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val原创 2017-02-26 15:17:18 · 142 阅读 · 0 评论 -
1009. Mersenne Composite N
1009. Mersenne Composite NConstraintsTime Limit: 1 secs, Memory Limit: 32 MBDescriptionOne of the world-wide cooperative computing tasks is the “Grand Internet Mersenne Prime Search” – GIMPS – striving原创 2017-06-11 21:47:52 · 189 阅读 · 0 评论 -
soj
1.一个由0和1组成的矩阵,求所有1到最近的0的距离,上下左右的距离为1,返回距离矩阵 2.给定一个序列,每次必须选择A[i]或者A[i+1]中的一个,求最小和 3.最大公共子串原创 2017-06-29 13:14:52 · 273 阅读 · 0 评论 -
53. Maximum Subarray
53. Maximum SubarrayKadane’s Algorithmclass Solution {public: //For example, given the array [-2,1,-3,4,-1,2,1,-5,4], //the contiguous subarray [4,-1,2,1] has the largest sum = 6 int maxSu原创 2017-06-16 16:25:35 · 153 阅读 · 0 评论 -
442. Find All Duplicates in an Array
442. Find All Duplicates in an Arraycode:#include <iostream>#include <vector>#include <cmath>using namespace std;ostream & operator<<(ostream &out, vector<int> &A) { for (vector<int>::iterator i原创 2017-03-21 23:56:38 · 153 阅读 · 0 评论 -
515. Find Largest Value in Each Tree Row
515. Find Largest Value in Each Tree Row问题: 找出BTree每一层最大的数思路: 使用队列,从右向左逐层遍历code:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *原创 2017-05-01 17:03:02 · 205 阅读 · 0 评论 -
145. Binary Tree Postorder Traversal
145. Binary Tree Postorder Traversal问题: 后序遍历二叉树思路: 1. 和前边的preorder,inorder不同,直接借助堆栈实现iterative算法似乎有些麻烦。所以先实现了递归(recursion)版本。 2. preorder的顺序是:root->left->right inorder的顺序是:left->root->right原创 2017-05-24 17:26:01 · 159 阅读 · 0 评论 -
563. Binary Tree Tilt
563. Binary Tree Tilt问题: 求BTree的Tilt. 节点的tilt定义为左右子树的数值和的绝对差值. 树的Tilt为所有节点的tilt之和.思路: 先得到树的tilt需要对节点求tilt, 对节点求tilt需要求出左右子树之和. 需要分左右子树并且从下向上遍历求和,最后到跟节点. 分为两个过程: 1, 对左右子树求和; 2, 求节点的tilt之和. 后序遍历比原创 2017-05-25 15:29:29 · 162 阅读 · 0 评论 -
105. Construct Binary Tree from Preorder and Inorder Traversal
105. Construct Binary Tree from Preorder and Inorder Traversal思路: recursioncode:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *原创 2017-05-25 18:03:40 · 168 阅读 · 0 评论 -
106. Construct Binary Tree from Inorder and Postorder Traversal
106. Construct Binary Tree from Inorder and Postorder Traversal思路: recursioncode:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode原创 2017-05-25 18:04:47 · 167 阅读 · 0 评论 -
94. Binary Tree Inorder Traversal
94. Binary Tree Inorder Traversal问题: 中序遍历二叉树思路: 先左子树,根节点,然后右子树。使用堆栈存储code:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *righ原创 2017-05-15 23:13:32 · 147 阅读 · 0 评论 -
144. Binary Tree Preorder Traversal
144. Binary Tree Preorder Traversal问题: 先序遍历二叉树思路: 先根节点,左子树,然后右子树。使用堆栈存储code:/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *ri原创 2017-05-15 23:21:02 · 140 阅读 · 0 评论 -
102. Binary Tree Level Order Traversal
102. Binary Tree Level Order Traversal问题: 层序遍历BTree, 逐层.思路: 和普通的层序相比, 需要对每层截断一下. 逐层入队, 使用queue的size, 逐层出队,再将下一层入队.code:/** * Definition for a binary tree node. * struct TreeNode { * int val原创 2017-05-26 15:31:45 · 181 阅读 · 0 评论 -
42. Trapping Rain Water
42. Trapping Rain Water问题: 算储水量 思路: 源于http://blog.csdn.net/linhuanmars/article/details/20888505 储水的思路很简单, 要找到左右两个岸. 使用左右两个指针, 从左右同时开始向中间遍历, 直到终止条件. 比较左岸和右岸, 移动低的指针, 同时累计储水量.code:class Solution {原创 2017-05-26 17:37:50 · 144 阅读 · 0 评论 -
121. Best Time to Buy and Sell Stock
121. Best Time to Buy and Sell Stock思路: Kadane’s Algorithmcode:class Solution {public: //[7, 1, 5, 3, 6, 4] //[5, 4, 3, 2] int maxProfit(vector<int>& prices) { if (prices.size()原创 2017-06-16 12:05:06 · 144 阅读 · 0 评论 -
吝啬SAT是NP-完全问题
《算法概论》8.3吝啬SAT问题是这样的:给定一组子句 (每个子句都是其中文字的析取) 和整数 k,求一个最多有 k 个变量为 true 的满足赋值——如果该赋值存在。证明吝啬SAT是NP-完全问题。证明:已知SAT问题是NPC问题。要证明吝啬SAT问题是NPC问题,只须证明,一个SAT问题可以在多项式时间归约到吝啬SAT问题。假设SAT问题有n个变量,令吝啬SAT问题中的k为SAT问题中的n,即在原创 2017-06-26 11:29:53 · 540 阅读 · 0 评论