【牛客网】构造MaxTree
来源:互联网 发布:mac打印6寸相纸 编辑:程序博客网 时间:2024/06/07 01:06
#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <stack>#include <algorithm>using namespace std;class MaxTree {public: vector<int> buildMaxTree(vector<int> A, int n) { const int NONE = -1; vector<int> left; //下标 vector<int> right;//下标 stack<int> myStack;//下标 int Size = A.size(); myStack.push(0); left.push_back(NONE); for(int i = 1; i < Size; i++) { int topValue = A[myStack.top()]; while(!myStack.empty() && A[i] > topValue) { myStack.pop(); if(myStack.empty()) break;//省略数组越界异常! topValue = A[myStack.top()]; } if(myStack.empty()) { left.push_back(NONE); myStack.push(i); } else { left.push_back(myStack.top()); myStack.push(i); } } while(!myStack.empty()) { myStack.pop(); } myStack.push(Size-1); right.push_back(NONE); for(int i = Size-2; i >= 0; i--) { int topValue = A[myStack.top()]; while(!myStack.empty() && A[i] > topValue) { myStack.pop(); if(myStack.empty()) break; topValue = A[myStack.top()]; } if(myStack.empty()) { right.push_back(NONE); myStack.push(i); } else { right.push_back(myStack.top()); myStack.push(i); } } reverse(right.begin(), right.end()); vector<int> result; for(int i = 0; i < Size; i++) { if(left[i] == NONE && right[i] == NONE) { result.push_back(-1); } else if((left[i] == NONE && right[i] != NONE) || (left[i] != NONE && right[i] == NONE) ) { if(left[i] != NONE) result.push_back(left[i]); else result.push_back(right[i]); } else { if(A[left[i]] > A[right[i]]) result.push_back(right[i]); else result.push_back(left[i]); } } return result; }};int main(){ vector<int> A; int n; int input; while(scanf("%d", &n) != EOF) { A.clear(); for(int i = 0; i < n; i++) { scanf("%d", &input); A.push_back(input); } MaxTree *obj = new MaxTree(); vector<int> result = obj->buildMaxTree(A, n); cout << "result: "; for(int i = 0; i < (int)result.size(); i++) { printf("%d ", result[i]); } } return 0;}/***108 1 9 3 2 6 0 5 4 7***/
0 0
- 【牛客网】构造MaxTree
- 构造MaxTree
- 构造MaxTree
- 构造MaxTree
- 构造MaxTree
- 构造MaxTree
- 构造Maxtree
- 构造数组的MaxTree
- 构造数组的MaxTree
- 构造数组的MaxTree
- 构造数组的MaxTree
- 构造MaxTree O(n)方法
- 【算法】构造数组的MaxTree
- MaxTree
- 【难】【二叉树】构造数组的MaxTree
- 数据结构(8) 构造数组的MaxTree
- 1_8构造数组的maxtree
- 构造数组的MaxTree----详细的题解
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined)A+B
- MATLAB工具箱下载地址总汇
- List<Map<String,Object>>使用Java代码遍历以获取String,Object的值
- 图片平移实现水波动画
- 《连载 - 物联网框架ServerSuperIO教程》- 7.自控通讯模式开发及注意事项
- 【牛客网】构造MaxTree
- myeclipse自动设置类和方法的注释(快捷键)
- 2017.1.16【初中部 】普及组模拟赛C组 chicken 题解
- 几个闭包内存泄漏的优化方案!
- guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用
- 二、CUDA安装和测试
- 内存管理之buddy system
- Android知识点收集
- Lambda 表达式有何用处?如何使用?