上一个较大的数字代码中的输出不正确
Incorrect output in Immediate Previous Larger Number code
Que:N个数字作为输入传递给程序。程序必须打印上一个较大的数字。如果没有这样的大数字,则为该特定数字打印 0。
注意:由于 N 可能高达 100000,因此请优化算法以避免超时。
输入格式:第一行包含 N。第二行包含用空格分隔的 N 个数字。
输出格式:第一行包含 N 个数字,表示前一个较大的数字。
边界条件:2 <= N <= 100000
示例输入/输出 1:输入:11 455 346 76 304 488 374 385 433 350 9 1000
输出: 0 455 346 346 0 488488 488 433 350 0
我的代码如下:
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
int n;
int a[100000],b[100000];
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=1;i<n;i++)
{
if(a[i]>a[i-1])
{
b[i]=0;
}
else
{
b[i]=a[i-1];
}
}
b[0]=0;
for(int i=0;i<n;i++)
{
cout<<b[i]<<" ";
}
}
我的代码输出: 0 455 346 0 0 488 0 0 433 350 0
预期 : 0 455 346 346 0 488488 488 433 350 0
我无法在这里找出问题,请建议如何优化代码。
方法 -
- 使用堆栈,该堆栈将按升序跟踪先前较大的元素。
-
从左到右扫描,对于
arr[i]
的每个元素,不断从堆栈弹出,直到堆栈的顶部元素大于当前数量我。如果堆栈为空,则左侧的数字不会大于当前。打印 0
ii. 否则打印堆栈的顶部元素,即前一个较大的数字。
-
将当前元素推送到堆栈中。
法典:
void immediatePreviousLarger(int arr[], int n) {
stack<int> Stack;
for(int i = 0; i < n; i++) {
while(!Stack.empty() and Stack.top() <= arr[i]) {
Stack.pop();
}
if(Stack.empty()) {
printf("0 ");
} else {
printf("%d ", Stack.top());
}
Stack.push(arr[i]);
}
}
时间复杂度O(n)
.
相关文章:
- Windows 10命令提示符的输出不正确
- C++ - 为什么 unicode 输出不正确?
- 我的叉子输出不正确
- C++使用 CEIL 和长度输出不正确的值
- 使用 iconv 进行 UTF8 转换的输出不正确
- C strftime()输出不正确
- 当行数和列不匹配时,输出不正确
- C++ 嵌套循环输出不正确
- 矩阵和矢量乘法,输出不正确的产品
- 我对这个问题有问题,我的输出不正确
- 上一个较大的数字代码中的输出不正确
- 二进制搜索树的输出不正确
- 拆解输出不正确(BeaEngine)
- 最大输出不正确
- 基本合并排序中的输出不正确
- 更改声明顺序时输出不正确
- Base64 转换器的输出不正确
- 使用 find_first_of() 和 substr() 分隔字符串,但我得到的输出不正确
- 对字符串进行索引时输出不正确
- .wav C++数据输出不正确