You are given two arrays (without duplicates)
nums1
andnums2
wherenums1
’s elements are subset ofnums2
. Find all the next greater numbers fornums1
's elements in the corresponding places ofnums2
.
The Next Greater Number of a number x in
nums1
is the first greater number to its right innums2
. 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 in nums1 and nums2 are unique.
- The length of both nums1 and nums2 would not exceed 1000.
难度
Easy
方法1
直接按照题目意思查找,时间复杂度O(m*n)
python代码
class Solution(object):
def nextGreaterElement(self, findNums, nums):
"""
:type findNums: List[int]
:type nums: List[int]
:rtype: List[int]
"""
result = []
for findNum in findNums:
numsCount = len(nums)
i = 0
equalFlag = False
while i < numsCount:
if equalFlag:
if findNum < nums[i]:
result.append(nums[i])
break;
else:
i += 1
else:
if findNum == nums[i]:
equalFlag = True
i += 1
if i == numsCount:
result.append(-1)
return result
assert Solution().nextGreaterElement([4,1,2], [1,3,4,2]) == [-1,3,-1]
assert Solution().nextGreaterElement([2,4], [1,2,3,4]) == [3,-1]
方法2
利用map和stack,遍历nums2
,将每个元素和它next greater element的对应关系存入map中,最后遍历nums1
从map中取值,如果没有返回-1。时间复杂度O(m+n)
python代码
class Solution(object):
def nextGreaterElement(self, findNums, nums):
"""
:type findNums: List[int]
:type nums: List[int]
:rtype: List[int]
"""
numsStack = []
numsMap = {}
for num in nums:
while len(numsStack) and (numsStack[-1] < num):
numsMap[numsStack.pop()] = num
numsStack.append(num)
result = []
for findNum in findNums:
result.append(numsMap.get(findNum, -1))
return result
assert Solution().nextGreaterElement([4,1,2], [1,3,4,2]) == [-1,3,-1]
assert Solution().nextGreaterElement([2,4], [1,2,3,4]) == [3,-1]