看楼问题
实例:
输入:
6//6栋楼
5 3 8 3 2 5//每栋楼高度。
输出:
3 3 5 4 4 4//表示站在对应位置处,所能看到的所有楼。
这道题当时自己没做完,交了卷之后才做的,测试用例是ok了,思路也比较清晰,就是从立足点开始,由近及远,向左向右,不断更新最高的楼高度,如果新楼比前面最高的一个楼高,就能看到,否则看不到。
#include<iostream>
using namespace std;
int main()
{
int n;
cin >> n;
int *V = new int[n];
for (int i = 0; i < n; i++)
{
cin >> V[i];
}
for (int i = 0; i < n; i++)
{
int ret = 1;
int Left;
int right;
Left =0;
right = 0;
int taret = 0;
if (i == 0)//只看右
{
for (int j = 1; j < n ; j++) {
//V[i]与V[j]的关系
if (V[j] > right)
{
ret++;
right = V[j];
}
}
}
else if (i == n - 1)//只看左
{
for (int j = i-1; j >-1; j--) {
//V[i]与V[j]的关系
if (V[j] > Left)
{
ret++;
Left = V[j];
}
}
}
else //看左右
{
for (int j = i-1; j >-1; j--) {//左边
if (V[j] > Left)
{
ret++;
Left = V[j];
}
}
for (int j = i+1; j < n; j++) {//右边
if (V[j] > right)
{
ret++;
right = V[j];
}
}
}
cout << ret<<" ";
}
int remei=1;
}