int* nextGreaterElements(int* nums, int numsSize, int* returnSize){
int *ret = malloc(sizeof(int) * numsSize);
int stack[numsSize];
int top = -1;
for (int i = 0; i < numsSize * 2; i++) {
int pos = i % numsSize;
if (i >= numsSize && nums[pos] == nums[stack[0]]) break;
while (top > 0 && nums[pos] > nums[stack[top]]) {
ret[stack[top]] = nums[pos];
top--;
}
if ( top == 0 && nums[pos] > nums[stack[top]]) {
ret[stack[top]] = nums[pos];
stack[top] = pos;
continue;
}
top++;
stack[top] = pos;
}
while (top >= 0) {
if ( top == 0 || nums[stack[top]] == nums[stack[0]]) {
ret[stack[top]] = -1;
}
else {
ret[stack[top]] = nums[stack[0]];
}
top--;
}
*returnSize = numsSize;
return ret;
}
暂无评论