编程之美
文章平均质量分 63
crazyacm
这个作者很懒,什么都没留下…
展开
-
判断R2是否为R1的子结构,递归实现
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if(pRoot2==NULL) return 1; if(pRoot1 == NULL) return 0; if(pRoot1->val == p原创 2015-09-09 21:06:06 · 371 阅读 · 0 评论 -
剑指offer:删除重复的节点
// 删除链表的重复节点fanal.cpp : 定义控制台应用程序的入口点。//题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,// 重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5//解题思路:先在草稿纸上画出几种可能的情况(头结点可能会改变的情况),分析后可知,需要三个指针//原创 2016-04-11 11:35:56 · 360 阅读 · 0 评论 -
剑指offer:正则式匹配
// 正则表达式.cpp : 定义控制台应用程序的入口点。//题目描述:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 // 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配//解题思路:通原创 2016-04-12 15:19:17 · 297 阅读 · 0 评论 -
剑指offer:字符串的排列
// ConsoleApplication5.cpp : 定义控制台应用程序的入口点。//题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c//所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。//解题思路:深度搜索,在每层搜索里设置一个a数组映射所有字符,每个字符在这层循环中只能使用原创 2016-04-05 10:41:10 · 266 阅读 · 0 评论 -
剑指offer:顺时针打印矩阵
//题目描述:给定一个矩阵按照顺时针顺序从外到内的打印这个矩阵//解题思路:设置一个全局的方向矢量dir其中的顺序是向右,向下,向左,向上// 每次给行加上一个方向矢量,当出现越界或者已经打印过的时候重新选择方向vector printMatrix(vector > matrix) { int dir[4][2]={{0,1},{1,0},{0,-1},{-原创 2016-04-04 13:37:59 · 305 阅读 · 0 评论 -
剑指offer:滑动窗口的最大值
a//题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,// 如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们// 的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: // {[2,3,4],2,6,2,5,1}, {2,原创 2016-04-02 19:46:15 · 605 阅读 · 0 评论 -
剑指offer:找到二叉树中序遍历的下一个节点
//题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 //注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 //思路:分为三种情况: //1.处理没有父亲节点,即根节点情况,找右子树的最左孩子 //2.自己是父亲的左子树输出父亲 //3.自己是父亲的右子树分为两种情况 // 3-1:自己有右孩子,输出原创 2016-04-02 17:09:26 · 2147 阅读 · 0 评论 -
剑指offer:构建乘积数组
//题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1], // 其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。 //题目思路:通过正反两次来求B // 正着:B[i]=A[0]*...A[i-1] //原创 2016-04-02 16:11:45 · 626 阅读 · 0 评论 -
剑指offer:找出数组中重复的数字
//题目描述:输入一个数组,找出其中重复的数字// 思路:利用map对数组的数字进行计数,找到不等于map中计数不为1的数字输出bool duplicate(int numbers[], int length, int* duplication) { if (length == 0) return false; map ma; int i; for (i = 0; i<lengt原创 2016-04-02 15:27:28 · 529 阅读 · 0 评论 -
剑指offer:扑克牌顺子
// 剑指offer_扑克牌顺子.cpp : 定义控制台应用程序的入口点。// 题目描述:输入五个数字,0可以代表任何数,问这五个数字是否是一个顺子// 思路: 排序后计算非0的相邻两个数之间的距离(gap),然后与0(大小王)的数量进行比较,看是否小于这个count#include "stdafx.h"#include"vector"using namespace std;原创 2016-04-02 15:14:24 · 374 阅读 · 0 评论 -
剑指offer:平衡二叉树
// 平衡二叉树_判断是否是平衡二叉树.cpp : 定义控制台应用程序的入口点。//题目描述:判断一棵树是否是平衡二叉树// 思路:求得每个节点的高度,递归的进行子树判断看是否是平衡二叉树#include "stdafx.h"struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x)原创 2016-04-02 14:42:14 · 358 阅读 · 0 评论 -
剑指offer:重建二叉树
// 重建二叉树2.cpp : 定义控制台应用程序的入口点。//题目描述:输入一个二叉树的前序遍历和中序遍历,输出这颗二叉树// 思路:前序遍历的第一个节点一定是这个二叉树的根节点,这个节点将二叉树分为左右子树两个部分,然后进行递归求解#include "stdafx.h"#include"vector"using namespace std;struct TreeNode原创 2016-04-02 13:58:44 · 233 阅读 · 0 评论 -
二叉搜索树与双向链表
// 排序二叉树与双向链表.cpp : 定义控制台应用程序的入口点。// 题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。// 思路:通过对一颗排序二叉树的认识可知一颗排序二叉树中序输出就是有序的// 通过后序遍历让子树分别找到自己的left和right结点,然后再与根节点相结合,// 结合原创 2016-04-02 12:44:12 · 308 阅读 · 0 评论 -
剑指offer:复杂链表的复制
//剑指offer:复杂链表的复制(复制一个包含random域的链表,random域随机的指向链表中任意节点)//思路:先复制出链表的next结构并且将自己对应的值和自身放入map中// 再复制random域,通过将之前链表的random域的值取出来,然后去map中找新链表对应的结点,并赋值。// 注意不要错误的使用之前的链表节点。画图让思路更清楚。#include原创 2016-04-01 14:39:04 · 244 阅读 · 0 评论 -
剑指offer:输出二叉树和为某一值的所有路径
//剑指offer:搜索一个二叉树,并且把和为expectNumber的路径上的值输出void funcPath(TreeNode* root, int expectNumber, int currentSum, vector v, vector >& res) { currentSum += root->val; v.push_back(root->val); if (currentS原创 2016-04-01 13:53:27 · 311 阅读 · 0 评论 -
统计一个数字二进制中一的个数。
//小技巧:将一个数字与本身减一相与,将会使其最右边的1变成0int NumberOf1(int n) { int numbers = 0; while(n!=0){ numbers++; n&=(n-1); } return numbers; }原创 2015-09-14 21:34:16 · 673 阅读 · 0 评论 -
统计一个数字在排序数组中出现的次数
int GetNumberOfK(vector data ,int k) { int low,high; int mid1,mid2; int res1,res2; res1=-1; res2=-1; low = 0; high=data.size()-1; while(原创 2015-09-11 22:16:10 · 1102 阅读 · 0 评论 -
矩阵中的路径
// 矩阵中的路径.cpp : 定义控制台应用程序的入口点。// 题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。// 路径可以从矩阵中的任意一个格子开始,// 每一步可以在矩阵中向左,向右,向上,向下移动一个格子。// 如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 // 例如 a b c e s f c原创 2016-05-02 17:47:29 · 391 阅读 · 0 评论