算法
cauahu
这个作者很懒,什么都没留下…
展开
-
二叉树中序遍历的下一个节点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:1.如果一个节点有右子树,那么中序遍历的下个节点就是它的右子树中最左子结点。 2.如果一个节点没有右子树,且它是它父节点的左子结点,那么中序遍历的下个节点就是它的父节点。 3.如果一个节点没有右子树,且它是父节点的右子结点,则原创 2016-06-06 14:17:20 · 1008 阅读 · 0 评论 -
删除链表中重复的节点
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。思路:本题的难点在于头节点的处理和重复2次以上节点的处理,采用递归的方法,一次删除重复节点。代码:ListNode* deleteDuplication(ListNode* pHead) {原创 2016-06-05 21:19:50 · 257 阅读 · 0 评论 -
正则表达式匹配
问题:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。思路:先来分析如何匹配一个字符,如果模式中的字符是'.',那么它可以匹配字符串中的任意字符。原创 2016-06-03 10:51:44 · 386 阅读 · 0 评论 -
最小的k个数
题目:输入n个整数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8.则最小的4个数字是1、2、 3、 4.思路:这道题有很多解法,最简单的思路为将n个数排序,然后输出排序后的k个数。还有就是利用堆的特点来解决,但都是排序的一种变体,时间复杂度为O(nlogn).这里我们用另外一种解法-分治法,基于快速排序的partition函数得来,如果基于数组的第k个数字来调整,使得比第k个数原创 2016-05-30 19:07:25 · 296 阅读 · 0 评论 -
二叉搜索树的后续遍历序列
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。思路:在后序遍历得到的序列中,最后一个数字是输的根节点的值。数组前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。如此就可以判断数组每一部分对应的子树的结构。代码:#include #in原创 2016-05-28 14:38:56 · 264 阅读 · 0 评论 -
编程珠玑----快速排序的变形
废话少说,直接进入正题。一般课本上关于快速排序给出的程序代码形式为int quicksort(vector &v, int left, int right){ if(left < right){ int key = v[left]; int low = left; int hig原创 2016-05-26 10:02:17 · 339 阅读 · 0 评论 -
编程珠玑---内循环优化
在《编程珠玑》第9章 代码调优一节有个小tips作者讲到顺序搜索中的循环优化调优问题,源代码如下:int search(){ for(int i=0;i<n;i++){ if(x[i]==t) return i; return -1; }}该循环其实已经很简洁了,但还可以再进行少许的精简。内循环中有两种测试:第一种测试检验i是否已到达数组末尾,第二种测试检验x[i原创 2016-05-25 10:44:13 · 295 阅读 · 0 评论 -
动态划归:最长公共子串和最长公共子序列--LCS
一、最长公共子序列--LSC(Longest Common Subsequence) (1)概念:一个字符串的子序列是指从该字符串中去掉任意多个字符后剩下的字符在不改变顺序的情况下组成的新字符串。例如cnblogs和belong的公共子序列为blog,仔细想想我们可以发现其实最长公共子序列的个数不是唯一的,有可能会有两个以上,但长度一定是唯一的。 (2)解决原创 2016-04-14 10:38:56 · 387 阅读 · 0 评论 -
寻找第一个重复的字符
#include #include #include using namespace std;int main(int argc, char const *argv[]){string str;cin >> str;set str_set;int len = str.size(), oldsize = str_set.size();for(i原创 2016-06-20 21:14:26 · 705 阅读 · 0 评论