503. Next Greater Element II
Posted 帅气一匹马
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了503. Next Greater Element II相关的知识,希望对你有一定的参考价值。
1 int* nextGreaterElements(int* nums, int numsSize, int* returnSize) { 2 int* stack=malloc(sizeof(int)*numsSize); 3 int* res=malloc(sizeof(int)*numsSize); 4 int top=-1; 5 *returnSize=numsSize; 6 for(int i=0;i<numsSize;i++) res[i]=-1; 7 8 for(int i=0;i<2*numsSize;i++){ 9 int num=nums[i%numsSize]; 10 while(top!=-1 && nums[stack[top]]<num){ 11 res[stack[top]]=num; 12 top--; 13 } 14 if(i<numsSize) stack[++top]=i; 15 } 16 return res; 17 }
1.如何表示循环 :i%numsSize 和 i<2*numsSize;
2.在遍历了一次nums之后,stack数组中存的全是没有找到greater的数,那么只需要从头再开始比较,例如nums[0]和stack中的比较,如果nums[0] greater的话 stack.top对应的res更新,然后pop出去即可。因为只要是小于nums[0]的stack均会在while中被循环更新res
3.唯一不同的是,stack不需要再push进数字了,因为第二次循环的任务就是消灭那些stack中存留的数字。
以上是关于503. Next Greater Element II的主要内容,如果未能解决你的问题,请参考以下文章
leetcode496 - Next Greater Element I - easy && leetcode503 - Next Greater Element II - medi
[栈] leetcode 503 Next Greater Element II