当我在memset
函数中使用printNGE
时,我在main()
中将数组元素初始化为-1时得到了正确的结果,我得到了正确的结果。
但是当我使用for循环在printNGE
函数中初始化相同时,我得到了错误的答案。由于某种原因,似乎数组元素的初始值在while循环的else部分内没有改变?请告诉我这种差异可能是什么原因。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stack>
using namespace std;
/* arr[] of size n */
void printNGE(int arr[], int n)
{
int i = 0;
stack <int> s;
int ans[n];
for(i=0;i<n;i++)//Set all the elements to -1
ans[i] = -1;
//memset(ans,-1,sizeof(ans));
while (i<n)
{
if(s.empty() || arr[s.top()]>arr[i])
s.push(i++);
else
{
ans[s.top()]=arr[i];
s.pop(); //pop till incoming element is greater
}
}
for(i=0;i<n;i++)
printf("%d -> %d\n",arr[i],ans[i]);
}
int main()
{
int arr[]= {11, 13, 21, 3};
int i;
int n = sizeof(arr)/sizeof(arr[0]);
//int ans[n];
//for(i=0;i<n;i++)//Set all the elements to -1
// ans[i] = -1;
printNGE(arr, n);
getchar();
return 0;
}
答案 0 :(得分:5)
i
循环的索引变量for
未重置。因此,while
循环不会被执行。