題目鏈接在此
You are given two arrays (without duplicates) nums1 and nums2 where nums1’s elements are subset of nums2. Find all the next greater numbers for nums1's elements in the corresponding places of nums2.
The Next Greater Number of a number x in nums1 is the first greater number to its right in nums2. If it does not exist, output -1 for this number.
Example 1:
Input: nums1 = [4,1,2], nums2 = [1,3,4,2].Output: [-1,3,-1]Explanation: For number 4 in the first array, you cannot find the next greater number for it in the second array, so output -1. For number 1 in the first array, the next greater number for it in the second array is 3. For number 2 in the first array, there is no next greater number for it in the second array, so output -1.Example 2:
Input: nums1 = [2,4], nums2 = [1,2,3,4].Output: [3,-1]Explanation: For number 2 in the first array, the next greater number for it in the second array is 3. For number 4 in the first array, there is no next greater number for it in the second array, so output -1.Note:
All elements innums1andnums2are unique.The length of bothnums1andnums2would not exceed 1000.大概就是找出表2中所有數字的 Next Greater Element :右側比他大的第一個數。表一相當于是個是query list,查詢單。用到棧和哈希。順便發現了個新大陸:for (int n : nums) C++ 11 可以這樣寫。(別鄙視我)class Solution {public: vector<int> nextGreaterElement(vector<int>& findNums, vector<int>& nums) { stack<int> s; unordered_map<int, int> m; for (int n : nums) { while(!s.empty() && s.top() < n) { m[s.top()] = n; // 棧里面比n小的數,他們的Next Greater Element都是n s.pop(); } s.push(n); } vector<int> ans; for (int n : findNums) { ans.push_back(m.count(n) != 0 ? m[n] : -1); } return ans; }};
新聞熱點
疑難解答