[編程題]逛街
時間限制:C/C++ 2秒,其他語言4秒
空間限制:C/C++ 256M,其他語言512M
小Q在週末的時候和他的小夥伴來到大城市逛街,一條步行街上有很多高樓,共有n座高樓排成一行。
小Q從第一棟一直走到了最後一棟,小Q從來都沒有見到這麼多的樓,所以他想知道他在每棟樓的位置處能看到多少棟樓呢?(當前面的樓的高度大於等於後面的樓時,後面的樓將被擋住)
輸入描述:
輸入第一行將包含一個數字n,代表樓的棟數,接下來的一行將包含n個數字wi(1<=i<=n),代表每一棟樓的高度。
1<=n<=100000;
1<=wi<=100000;
輸出描述:
輸出一行,包含空格分割的n個數字vi,分別代表小Q在第i棟樓時能看到的樓的數量。
輸入例子1:
6 5 3 8 3 2 5
輸出例子1:
3 3 5 4 4 4
例子說明1:
當小Q處於位置3時,他可以向前看到位置2,1處的樓,向後看到位置4,6處的樓,加上第3棟樓,共可看到5棟樓。當小Q處於位置4時,他可以向前看到位置3處的樓,向後看到位置5,6處的樓,加上第4棟樓,共可看到4棟樓。
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
int n, val, index;
cin >> n;
vector<int> arr;
for(index = 0; index < n; index++)
{
cin >> val;
arr.push_back(val);
}
int sub_id, biggest_value, count;
for(index = 0; index < n; index++)
{
count = 1;
for(sub_id = index - 1; sub_id >= 0; sub_id--)
{
if(sub_id == (index - 1))
{
count++;
biggest_value = arr[sub_id];
continue;
}
if(arr[sub_id] > biggest_value)
{
count++;
biggest_value = arr[sub_id];
}
}
for(sub_id = index + 1; sub_id < n; sub_id++)
{
if(sub_id == (index + 1))
{
count++;
biggest_value = arr[sub_id];
continue;
}
if(arr[sub_id] > biggest_value)
{
count++;
biggest_value = arr[sub_id];
}
}
cout << count << " ";
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, val, index;
cin >> n;
int* arr = (int*)malloc(sizeof(int) * n);
for(index = 0; index < n; index++)
{
scanf("%d", &val);
*(arr+index) = val;
}
int sub_id, biggest_value, count;
for(index = 0; index < n; index++)
{
count = 1;
for(sub_id = index - 1; sub_id >= 0; sub_id--)
{
if(sub_id == (index - 1))
{
count++;
biggest_value = *(arr + sub_id);
continue;
}
if(arr[sub_id] > biggest_value)
{
count++;
biggest_value = *(arr + sub_id);
}
}
for(sub_id = index + 1; sub_id < n; sub_id++)
{
if(sub_id == (index + 1))
{
count++;
biggest_value = *(arr + sub_id);
continue;
}
if(arr[sub_id] > biggest_value)
{
count++;
biggest_value = *(arr + sub_id);
}
}
printf("%d ", count);
}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int n, val, index;
scanf("%d", &n);
int* arr = (int*)malloc(sizeof(int) * n);
for(index = 0; index < n; index++)
{
scanf("%d", &val);
*(arr+index) = val;
}
int sub_id, biggest_value, count;
for(index = 0; index < n; index++)
{
count = 1;
for(sub_id = index - 1; sub_id >= 0; sub_id--)
{
if(sub_id == (index - 1))
{
count++;
biggest_value = *(arr + sub_id);
continue;
}
if(arr[sub_id] > biggest_value)
{
count++;
biggest_value = *(arr + sub_id);
}
}
for(sub_id = index + 1; sub_id < n; sub_id++)
{
if(sub_id == (index + 1))
{
count++;
biggest_value = *(arr + sub_id);
continue;
}
if(arr[sub_id] > biggest_value)
{
count++;
biggest_value = *(arr + sub_id);
}
}
printf("%d ", count);
}
free(arr);
return 0;
}
您的代碼已保存
運行超時:您的程序未能在規定時間內運行結束,請檢查是否循環有錯或算法複雜度過大。
case通過率爲50.00%