摘要: 题目描述:由于某种原因一个二叉排序树的两个节点的元素被交换,在不改变树的结构的情况下恢复这颗二叉排序树题目来源:http://oj.leetcode.com/problems/recover-binary-search-tree/题目分析:中序遍历二叉排序树会得到递增序列,如果两个元素交换,递增序列的顺序必被破坏,例如:1, 2, 3, 4, 5, 6, 7。交换后可能会有(1)1, 2, 6, 4, 5, 3, 7 (2)1, 2, 3, 4, 6, 5,7 等在中序遍历时,出现当前元素比中序遍历中前一个元素小时,找到出错元素,维护一个刚刚遍历的节点的指针pre,当遍历结束当前节点时,更新p 阅读全文
posted @ 2013-09-25 20:13 代金桥 阅读(598) 评论(0) 推荐(0)
摘要: 题目描述:给定n个非负整数height[n],分别代表直方图条的高,每个条的宽设为1,求直方图中面积最大的矩形的面积题目来源:http://oj.leetcode.com/problems/largest-rectangle-in-histogram/题目分析:维护一个栈,保存直方图条的下标,当当前栈为空或者栈顶的下标所表示的元素不大于当前元素时,入栈,否则出栈,直到可以把当前元素压入栈中(1)对于当前栈,假设序列为a1, a2,...ai, ai+1, a...栈顶,那么处于ai和ai+1之间的元素一定大于ai+1,如果他们中的最小元素小于等于ai+1,那么它一定在栈中,故栈中处于ai和ai 阅读全文
posted @ 2013-09-22 00:03 代金桥 阅读(394) 评论(0) 推荐(0)
摘要: 题目描述:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数题目来源:http://ac.jobdu.com/problem.php?pid=1384题目分析:假设数组有m行、n列,待查找元素为t由于数组行、列均为递增排序,那么对于一个元素data[i][j]和待查找元素比较有三种情况(1)data[i][j] = t, 那么得到结果,返回(2)data[i][j] t, 那么(i,j)右上方的元素都大于t,可以将这部分排除考虑一个比较特殊的右上角位置(1,n),若data[1][. 阅读全文
posted @ 2013-09-18 17:03 代金桥 阅读(204) 评论(0) 推荐(0)