笔试算法题(07):还原后序遍历数组 & 半翻转英文句段
出题:输入一个整数数组,判断该数组是否符合一个二元查找树的后序遍历(给定整数数组,判定其是否满足某二元查找树的后序遍历);
分析:利用后序遍历对应到二元查找树的性质(序列最后一个元素必定是根节点,从左向右第一个比根节点大的元素开始直到根节点之前的所有元素必定在右子树,之前的所有元素必定在左子树);
解题:
bool PostOrderCheck(int *array, int i, int j) {
/**
* 如快速排序一样,解决小子文件
* */
if(j-i+ == ) {
if(array[i]<=array[i+] && array[i+]<=array[i+])
return true;
else
return false;
} else if(i-i+ == ) {
if(array[i]<=array[i+] || array[i]>=array[i+])
return true;
else
return false;
}
int left=i, right=j-;
/**
* 一共有四种情况:指针交叉后跳出,指针未交叉即跳出,left到达最右边,right到达最左边
* 如果第二种情况成立则判定必定失败
* */
while(left<j) {
if(array[left]>array[j])
break;
left++;
}
while(right>=i) {
if(array[right]<array[j])
break;
right--;
}
/**
* 两种特殊情况:只有左子树或者只有右子树的递归
* */
if(left==j || right<i)
return PostOrderCheck(array, i, j-);
/**
* 另外两种跳出情况,break,此时left和right不可能重合
* */
if(left>right) {
/**
* 如果left比right大,说明成功交叉
* */
return PostOrderCheck(array, i, right) || PostOrderCheck(array, left, j-);
} else {
/**
* 如果left比right小,说明左子树中有元素比根节点大,或者右子树中有元素比根节点小
* */
return false;
}
}
出题:输入一个英文句子,其中的单词以空格符号隔开;要求翻转句子中单词的顺序,但是单词内字符顺序不变(简单起见,标点符号和普通字母一样处理);
分析:两次翻转,全局翻转(针对所有字符)和局部翻转(针对两个空格符之间的字符)
解题:
/**
* 借用之前已经实现的全局翻转函数reverse
* */
void reverse(char* target, int length) {
char temp;
int i;
for(i=;i<length/;i++) {
temp=*(target+i);
*(target+i)=*(target+(length-i-));
*(target+(length-i-))=temp;
}
}
void DoubleTransfer(char *target, int length) {
/**
* 首先进行全局翻转,得到!tneduts a ma i
* */
reverse(target, length);
char *part=NULL;
int partLength;
/**
* 然后进行局部翻转,从第一个非空格符的字符开始计算
* 子子序列的长度,直到第一个空格符号结束,然后
* 调用reverse进行局部翻转,最后进入下一个iteration
* */
for(int i=;i<length;i++) {
partLength=;
while(target[i] == ' ' && i<length) i++;
part=target+i;
while(target[i] != ' ' && i<length) {
i++;
partLength++;
}
reverse(part, partLength);
}
}
笔试算法题(07):还原后序遍历数组 & 半翻转英文句段的更多相关文章
- 笔试算法题(40):后缀数组 & 后缀树(Suffix Array & Suffix Tree)
议题:后缀数组(Suffix Array) 分析: 后缀树和后缀数组都是处理字符串的有效工具,前者较为常见,但后者更容易编程实现,空间耗用更少:后缀数组可用于解决最长公共子串问题,多模式匹配问题,最长 ...
- LintCode2016年8月8日算法比赛----中序遍历和后序遍历构造二叉树
中序遍历和后序遍历构造二叉树 题目描述 根据中序遍历和后序遍历构造二叉树 注意事项 你可以假设树中不存在相同数值的节点 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下 ...
- [剑指offer] 二叉搜索树的后序遍历序列 (由1个后续遍历的数组判断它是不是BST)
①题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. ②思路 1.后续遍历的数组里,最后一个元素是根. 2 ...
- 【Java】 剑指offer(33) 二叉搜索树的后序遍历序列
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如 ...
- leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树
题目: 105 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...
- [LeetCode] 889. Construct Binary Tree from Preorder and Postorder Traversal 由先序和后序遍历建立二叉树
Return any binary tree that matches the given preorder and postorder traversals. Values in the trave ...
- (原)neuq oj 1022给定二叉树的前序遍历和后序遍历确定二叉树的个数
题目描述 众所周知,遍历一棵二叉树就是按某条搜索路径巡访其中每个结点,使得每个结点均被访问一次,而且仅被访问一次.最常使用的有三种遍历的方式: 1.前序遍历:若二叉树为空,则空操作:否则先访问根结点, ...
- LeetCode 106. 从中序与后序遍历序列构造二叉树(Construct Binary Tree from Inorder and Postorder Traversal)
题目描述 根据一棵树的中序遍历与后序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 中序遍历 inorder = [9,3,15,20,7] 后序遍历 postorder = [9 ...
- 51nod 1832 前序后序遍历
思路:设只有一颗子树的节点有ans个设前序边历数组为pre[100],后序遍历数组为pos[100]:前序遍历的第二个元素是A的一个子节点左右节点不知,设ax-ay表示一个树的前序遍历,bx-by表示 ...
随机推荐
- IDC 内网机器 通 过 iptables SNAT上网的配置方法
有三台机器, A .B .C,其中A机器有外网和内网IP,B和C只有内网,我们配置B和C二台机器通过A机器来上外网. 假设A机器 外网IP为: 60.12.13.14 内网IP为: 192.168. ...
- bzoj 4078: [Wf2014]Metal Processing Plant【二分+2-SAT+枚举+并查集】
枚举从大到小s1,二分s2(越大越有可能符合),2-SAT判断,ans取min 思路倒是挺简单的,就是二分的时候出了比较诡异的问题,只能二分s2的值,不能在数组上二分... 有个优化,就是当不是二分图 ...
- UVA - 10859 Placing Lampposts 放置街灯
Placing Lampposts 传送门:https://vjudge.net/problem/UVA-10859 题目大意:给你一片森林,要求你在一些节点上放上灯,一个点放灯能照亮与之相连的所有的 ...
- 数字货币期货与现货JavaScript量化策略代码详解汇总
1.动态平衡策略 按照当前的 BTC 的价值,账户余额保留¥5000 现金和 0.1个 BTC,即现金和BTC 市值的初始比例是 1:1. 如果 BTC 的价格上涨至¥6000,即 BTC 市值大于账 ...
- Kubernetes集群认证
1.集群搭建:https://www.kubernetes.org.cn/3808.html 2.集群验证:https://www.kubernetes.org.cn/1861.html
- 前端基础jQuery
jQury jQuery 是一个 JavaScript 函数库,jQuery 极大地简化了 JavaScript 编程. jQuery库包含以下功能: HTML 元素选取 HTML 元素操作 CSS ...
- ROS学习笔记四:用C++编写ROS发布与订阅
1 创建并编译功能包 1.1 创建功能包 在工作空间的 src 目录下创建功能包: $ cd ~/dev/catkin_ws/src $ catkin_create_pkg chapter2_tuto ...
- 使用Jenkins进行android项目的自动构建(1)
环境搭建 1. 下载JDK,安装,并将JDK的安装目录加入到环境变量JAVA_HOME,将JDK的bin目录加入到环境变量PATH. 2. 下载Android SDK,解压,并将SDK的安装目录加入到 ...
- [备忘]Notification的实用
Intent resultIntent = null; if (!TextUtils.isEmpty(tid)){ resultIntent = new Intent("com.shijie ...
- vue2.0 静态prop和动态prop
动态prop: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <t ...