Given a circular array (the next element of the last element is the first element of the array), print the Next Greater Number for every element. The Next Greater Number of a number x is the first greater number to its traversing-order next in the array, which means you could search circularly to find its next greater number. If it doesn't exist, output -1 for this number.
Example 1:
Input: [1,2,1] Output: [2,-1,2] Explanation: The first 1's next greater number is 2; The number 2 can't find next greater number; The second 1's next greater number needs to search circularly, which is also 2.
Note:The length of given array won't exceed 10000.
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* nextGreaterElements(int* nums, int numsSize, int* returnSize) {
*returnSize=numsSize;
int *res;
res=(int *)calloc(*returnSize,sizeof(int *));
int i,j;
for(j=0;j<numsSize;j++)
{
for(i=(j+1)%numsSize;j!=i;i=(i+1)%numsSize)
{
if(nums[i]>nums[j])
{
res[j]=nums[i];
break;
}
}
if(i==j)
res[j]=-1;
}
return res;
}