503. Next Greater Element II
Description 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.
Analysis 这道题是寻找一个数组中每一个元素从右边开始的第一个比它大的元素,这道题的一个特点是它是可以循环的,意思就是当到达最后一位时,可以回到下标0从而开始寻找目标元素直到到当前元素才停止寻找。这道题一开始我用的判断条件,是当循环到最后一位时直接把下标设置为0,但不知到为什么LeetCode认为我超时了,所以与数据结构循环队列相类似的方法,即将下标+1除以长度取余数为新的下标然后判断是否符合条件。
Code
class Solution { public: vector<int> nextGreaterElements(vector<int>& nums) { //int len = findNums.size(); int len = nums.size(); int index; vector<int> vec; for(int i = 0 ; i <len ;++i){ index = 0 ; for( int j = (i+1)%len ; index<len ;++index){ if(nums[j]>nums[i]){ vec.push_back(nums[j]); break; } else j = (j+1)%len; } if(index == len) vec.push_back(-1); } return vec; } };