自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(41)
  • 资源 (3)
  • 收藏
  • 关注

原创 85:Maximal Rectangle【数组】【哈希】【栈】【DP】

题目链接:click~/*题意:给出包含0和1的矩阵,从图中找出最大包含1的矩形的面积(全为1)*//** *思路: 可转化成求“最大矩形面积” * 将每一列的连续的1想象成柱子,扫描每一列,记录以当前元素 * 为柱子底端时柱子的高度。 * 扫描每一行,求以当前行,为所有柱子底端时,求最大矩形面积 */class Solution {pub

2015-04-22 10:56:17 714

原创 84:Largest Rectangle in Histogram【数组】【栈】

题目链接:click~/*题意:N个非负整数,分别代表宽为1的柱子,从图中找出最大矩形的面积*//** *思路: 观察发现,只有较矮的柱子才能和其它柱子构成矩形。比较相邻的两个 * 柱子: * 1)如果后面的柱子比前面的矮,如1比2矮,那么2在以后的计算中已经 * 没什么用,这时候计算2和之前的柱子组成的最大矩形。 * 2)如果后面的柱子比前面的高

2015-04-22 09:22:15 586

原创 155:Min Stack【栈】【数据结构】

题目链接:click~/*题意:设计一个栈,支持push,top,pop以及getMin()(返回栈中最小值)*//** *思路:用一个栈维护最小值,当前要push的值小于等于最小栈的栈顶时 * 压入最小栈 */class MinStack {private: stack s; stack min_s;public: void push(i

2015-04-21 10:00:57 498

原创 49:Anagrams【哈希】【字符串】

题目链接:click~/*题意:给出很多单词,输出所有的变位词 变位词:单词中的字符排序完以后是相同的*//** *思路:1)从strs的第一个元素开始遍历,排序得到tmp * 2)查看tmp是否在map中 * 3)若不存在,将(tmp,i)存入map中 * 4)若存在,通过保存的下标将第一次出现tmp的字符串加入res中, * 再

2015-04-19 17:47:06 562

原创 3:Longest Substring Without Repeating Characters【哈希】【两指针】【字符串】

题目链接:click~/*题意:一个字符串,求不含有重复字母的最长子串的长度*//** *思路: 用v[]记录字母出现的位置。扫描字符串时,如果该字符 * 已经出现过,且出现的位置在开始位置之前,更新开始位置。 */class Solution {public: int lengthOfLongestSubstring(string s) {

2015-04-19 16:34:14 426

原创 124:Binary Tree Maximum Path Sum【树】【DFS】

题目链接:click~/*题意:给定一颗二叉树,求最大路径和。路径可以从任意结点开始,任意结点结束*//** *思路: 对于每个结点,需要比较三个值 * 1)左子结点为结尾的路径和+当前结点值 * 2)右子结点为结尾的路径和+当前结点值 * 3)当前结点值 * * 计算以当前结点为根时最大路径和: * 1)左子结点为

2015-04-19 15:51:52 569

原创 50:Pow(x, n)【数学】【二分】

题目链接:click~/*题意:求x的n次方*//** *思路: 二分: * n为偶数,x^n= (x^(n/2))*(x^(n/2)) * n为奇数,只需要再乘以x */class Solution {public: double pow(double x, int n) { if(n == 0) return 1;

2015-04-18 10:38:13 547

原创 66:Plus One【数组】【数学】

题目链接:click~/*题意:给出一个数,加上一*//** *思路: 比较特殊的就是到了最高位仍然需要进位,那么必须重新 * 申请内存空间,第一位是1,其它位都是0 */class Solution {public: vector plusOne(vector& digits) { int len = digits.size();

2015-04-18 10:02:18 469

原创 9:Palindrome Number【数学】

题目链接:click~/*题意:判断一个是否是回文数*//** *思路: 每次取首尾数字进行判断 */class Solution {public: bool isPalindrome(int x) { if(x < 0) return false; if(x == 0) return true; int base =

2015-04-17 20:43:27 410

原创 168:Excel Sheet Column Title【数学】

题目链接:click~/*题意:10进制的数转换成26进制的*//** *思路: 本题26进制和普通10进制有所不同,10进制中10是有1和0组成的,但 * 此26进制中26由Z表示,并不是有两个其它字母组成,所有,每次计算 * 前,先将n减一,这样就好算多了。 */class Solution {public: string convert

2015-04-17 20:20:04 539

原创 93:Restore IP Addresses【回溯】【字符串】

题目链接:click~/*题意:给出一串只含数字的字符串,返回所有合法的IP*//** *思路: 对字符串进行分段处理,每段组成的数不能超过255,。将IP地址分为4段 * 每段有三种情况: * 1)只取一个数字 * 2)取两个数字,第一个数不为0 * 3)取三个数字,第一个数字不为0,且三个数字组成的数小于256 */clas

2015-04-17 19:16:59 758

原创 125:Valid Palindrome【两指针】【字符串】

题目链接:click~/*题意:判断一串字符串是否是回文串,忽略标点和空格*//** *思路:两个指针,一个从前往后遍历,另一个从后往前遍历,每次判断 * 两指针指向的值是否相同 */class Solution {public: bool isPalindrome(string s) { int len = s.size();

2015-04-17 15:10:44 475

原创 20:Valid Parentheses【栈】【字符串】

题目链接:click~/*题意:括号配对*//** *思路:遍历整个字符串 * 1)遇到的字符为左括号时,直接压入栈中 * 2)遇到的字符为右括号时,且栈不为空,判断是否和栈中括号匹配 * 匹配则删除栈顶元素 * 3)其它情况,返回false */class Solution {public: bool isValid

2015-04-17 14:49:39 664

原创 14:Longest Common Prefix【字符串】

题目链接:click~/*题意:求一串单词的公共前缀*//** *思路:比较每个单词的第i位,直到不同 */class Solution {public: string longestCommonPrefix(vector& strs) { string s; if(strs.size() == 0) return s;

2015-04-17 14:24:46 536

原创 13:Roman to Integer【数学】【字符串】

题目链接:click~/*题意:给出一串罗马数字,转化成阿拉伯数学。罗马数字值为1~3999*//** *思路:注意处理比较特殊的罗马数字,IV,IX,XL,XC,CD,CM,这些组合的值都是 * 右边较大的数字减去左边较小的数字。 * */class Solution {public: int romanToInt(string s) {

2015-04-17 13:50:48 452

原创 117:Populating Next Right Pointers in Each Node II【树】【DFS】

题目链接:click~/*题意:给定一个二叉树,将每一层的结点连接起来,要求使用O(1)的空间*//** *思路:116题的变形,116给出的是完全二叉树,本体给出的是一般的二叉树 * 基本思路相同,用next记录下一层的第一个结点。pre记录当前结点的 * 前一个结点。 */class Solution {public: void connec

2015-04-16 19:01:18 610

原创 199:Binary Tree Right Side View【树】【DFS】【BFS】

题目链接:click~/*题意:给出一个二叉树,假设你站在树的最右侧,求能看到的数*//** *思路:DFS遍历整棵树,先判断当前结点是否是最右侧的,接着遍历 * 右子树,再左子树。 */class Solution {public: void GetView(TreeNode *root, vector &v, int level) {//level表示第

2015-04-16 12:42:28 432

原创 94:Binary Tree Inorder Traversal【树】【哈希】【栈】

题目链接:click~/*题意:二叉树的中序遍历*/class Solution {public: void InOrderTraverse(TreeNode *root, vector &v) { if(root == NULL) return; InOrderTraverse(root->left, v); v.push_bac

2015-04-16 12:09:45 578

原创 173:Binary Search Tree Iterator【树】【栈】

题目链接:click~/*题意:实现BST迭代器类,next()函数返回下一个最小的结点,hasNext()判断是否有下一个最小结点 要求O(1)的时间和O(h)的的复杂度,h为树的高度*//** *思路:next()返回的其实就是中序遍历二叉树时,当前结点的相邻结点 * 考虑使用一个栈,栈顶代表下一个要返回的结点,栈里保存着从根结点 *

2015-04-16 12:01:23 541

原创 116:Populating Next Right Pointers in Each Node【树】【DFS】

题目链接:click~/*题意:f给定一个完全二叉树,将每一层的结点连接起来,要求使用O(1)的空间*//** *思路:1)按层遍历完全二叉树,记录每一层的第一个需要遍历的结点。观察发现, 下一层的第一个节点是本层第一个结点的左子结点。 * 2)把属于同一个父节点的左右子节点连接起来 * 3)连接不属于同一个父节点的临近结点,即跨子树的连接:我

2015-04-16 09:53:46 362

原创 98:Validate Binary Search Tree【树】【DFS】

题目链接:click~/*题意:判断二叉树是否是BST*//** *思路:中序遍历整棵树,记录结点的前驱结点,当前结点大于前驱结点,返回false * */class Solution {public: void checkBST(TreeNode *root, TreeNode *&pre, bool &flag) { if(root == NULL)

2015-04-15 16:08:00 413

原创 129:Sum Root to Leaf Numbers【树】【DFS】

题目链接:click~/*题意:给出一颗二叉树,从根结点到叶子结点路径上所有结点的值可以组成一个数 求这些数的和*//** *思路:DFS遍历整棵树,用num记录以当前结点为结尾的可以组成的数 * 当遍历到叶子结点时,累加到sum * */class Solution {public: void GetSum(TreeNode *root,

2015-04-15 15:30:12 452

原创 101:Symmetric Tree【树】【DFS】

题目链接:click~:解法1:队列/*题意:判断一颗二叉树是否是自己的镜像*//** *思路: 只要保证根结点下的左子树的每一层是右子树的镜像,此树是自己的镜像 * 我们利用两个队列分别记录左右子树的每一层的结点。BFS遍历左右子树时 * 为方便比较左右结点,将空结点也加入到队列中。对于结点的判断,有以下情 * 况: *

2015-04-15 12:07:31 371

原创 103:Binary Tree Zigzag Level Order Traversal【树】【BFS】【栈】

题目链接:click~/*题意:对一颗二叉树进行Z字行一层一层的遍历*/class Solution {public: void DFS(TreeNode *T, int level, vector> &path) { if(T == NULL) return; if(level == path.size()) { path.

2015-04-14 20:50:35 312

原创 99:Recover Binary Search Tree【树】【DFS】

题目链接:click~/*题意:二叉搜索树种有两个结点被调换,要求将它们找出来并恢复*//** *思路:中序遍历二叉树时,记录第一次违反有序规则的两个结点,这两个结点中的 * 第一个结点一定是被调换的结点,但是不能确定第二个结点是不是被调换的 * 另一个结点。继续寻找,如果第二次发现有违反有序规则的两个结点,那么 * 这两个结点中的第二个结点一定被调换

2015-04-14 20:27:27 392

原创 107:Binary Tree Level Order Traversal II【树】【BFS】

题目链接:click~/*题意:将二叉树中的结点一层一层的逆序输出*//** *思路:在102那道题的代码上,直接将vector反转即可 * */class Solution {public: void DFS(TreeNode *T, int level, vector> &path) { if(T == NULL) return;

2015-04-14 18:32:12 400

原创 102:Binary Tree Level Order Traversal【树】【BFS】

题目链接:click~/*题意:将二叉树中的结点一层一层的输出*//** *思路:用两个队列,一个队列保存当前层的结点,另一队列保存下一层的结点。 * 当遍历某层结点时,插入下一层的结点。 */class Solution {public: vector > levelOrder(TreeNode *root) { vector v;

2015-04-14 17:01:40 413

原创 110:Balanced Binary Tree【树】【DFS】

题目链接:click~/*题意:判断一颗平衡二叉树是否平衡*//** *思路:平衡二叉树的每个结点的左右子树的深度差不超过1 * DFS记录每个结点的左右子树的深度,判断是否平衡 */class Solution {public: bool Judge(TreeNode *T, int &dep) { if(T == NULL) {

2015-04-14 15:52:42 544

原创 113:Path Sum II【树】【DFS】

题目链接:click~/*题意:给出一颗树和一个值sum,求树中从根结点到叶子结点的所有路径 且每条路径上结点的和等于sum */ class Solution {public: void GetPathSum(TreeNode *T, int sum, vector &v, vector> &path) { if(T == NULL) re

2015-04-14 14:30:38 531

原创 112:Path Sum【树】【DFS】

题目链接:click~/*题意:给出一颗树和一个值sum,求树中是否存在从根结点到叶子结点的一条路径 使得这条路径上结点的和等于sum */class Solution {public: bool hasPathSum(TreeNode *root, int sum) { if(root == NULL) return false;

2015-04-14 14:01:25 364

原创 104:Maximum Depth of Binary Tree【树】【DFS】

题目链接:click~/*题意:求二叉树的深度*/class Solution {public: int maxDepth(TreeNode *root) { if(root == NULL) return 0; return max(maxDepth(root->left), maxDepth(root->right)) + 1; }};

2015-04-14 13:37:19 309

原创 111:Minimum Depth of Binary Tree【树】【DFS】

题目链接:click~/*题意:求二叉树的最小深度(从根结点到最近的叶子结点)*//** *思路:DFS遍历整个树,只需要叶子结点的到根的距离 * */struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL),

2015-04-14 13:31:25 346

原创 144:Binary Tree Preorder Traversal【树】【栈】

题目链接:click~/*题意:二叉树的前序遍历 */class Solution {public: void PreOrderTraverse(TreeNode *T, vector &v) { if(T == NULL) return; v.push_back(T->val); PreOrderTraverse(T->left,

2015-04-14 11:13:58 338

原创 145:Binary Tree Postorder Traversal【树】【栈】

题目链接:click~/*题意:二叉树的后序遍历*/class Solution {public: void PostOrderTraverse(TreeNode *T, vector &v) { if(T == NULL) return; PostOrderTraverse(T->left, v); PostOrderTravers

2015-04-14 11:09:20 396

原创 100:Same Tree【树】【DFS】

题目链接:click~/*题意:判断两个树是否相同*/class Solution {public: bool isSameTree(TreeNode *p, TreeNode *q) { if( !( (p && q && p->val == q->val) || (p == NULL && q == NULL) ) ) return false;

2015-04-14 10:57:28 478

原创 200:Number of Islands【DFS】【BFS】

题目链接:click~/*题意:给出一个二维0和1的矩阵,判断有多少全是1的封闭区域*//** *思路:遍历矩阵,遇到1时,以该点为起始点,向四周做深度优先遍历,遇到 * 1是,标记为已访问的状态 * */class Solution {private: int n,m;public: void DFS(vector> &grid, vector

2015-04-13 18:30:11 793

原创 130:Surrounded Regions【BFS】

题目链接:click~/*题意:给出一个二维数组,有'X'和'O',将被'X'包围的'O'替换为'X'*//** *思路:与其求被X包围的O,不如求没有被X包围的O,先对这样的O进行标记(标记成+) * 最后重新扫描一下数组,将遇到的O变成X,遇到的特殊标记变成O * */class Solution {private: int n,m;public:

2015-04-13 16:59:53 509

原创 72:Edit Distance【DP】【字符串】

题目链接:click~/*题意:输入两个单词word1和word2,求从word1转换成word2的最少步骤 操作有:删除,添加,替换一个字符 *//** *思路:DP,d[i][j]表示word1[0,...,i-1]转换到word2[0,...,j-1]的最少步骤 * d[i][j]= d[i-1][j-1],当word1[i-1]与word2[j-1]

2015-04-13 12:04:35 374

原创 115:Distinct Subsequences【DP】【字符串】

题目链接:click~/*题意:给出两个字符串S和T,求T在S中的子串数。(可以删除S中的字符, 但不能改变原来的相对顺序,共有多少删除方法变成T) *//** *思路:DP,d[i][j]表示S[0,...,i]到T[0,...,j]有多少种转换方式 * 可以想象成二维地图的走法问题,那么问题转为从左上角只能走对角(匹配) 或者往

2015-04-12 20:09:46 425

转载 c++ vector(向量)使用方法详解(顺序访问vector的多种方式)

vector是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器,本文介绍一下使用方法vector 是向量类型,它可以容纳许多类型的数据,如若干个整数,所以称其为容器。vector 是C++ STL的一个重要成员,使用它时需要包含头文件: 代码如下:#include;一、vector 的初始化:可以有五种方式,举例说明如下:(1) ve

2015-04-12 19:44:48 760

c#课程设计

c#课程设计:计算器,五子棋,贪食蛇,职工信息管理系统等

2014-06-27

上海交大ACM final选手模板

上海交大ACM竞赛 final选手模板,ACM能用到的各种算法基本都有

2014-06-17

空空如也

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

TA关注的人

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