题目地址:https://leetcode.com/problems/next-greater-element-i/
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 in
nums1
andnums2
are unique. - The length of both
nums1
andnums2
would not exceed 1000.
双层循环,内层循环先找到相等元素的位置,然后再在相等元素后面找更大的元素。
package org.ks.algorithm;
/**
* Created by Kevin on 2017/2/13.
*/
public class NextGreaterElementI {
public static int[] nextGreaterElement(int[] findNums, int[] nums) {
int[] result = new int[findNums.length];
if (findNums.length == 0)
return result;
for (int i = 0; i < findNums.length; i++) {
int j = 0;
for (;j < nums.length; j++) {
if (nums[j] != findNums[i])
continue;
else
break;
}
j++;
for (;j < nums.length; j++) {
if (nums[j] > findNums[i]) {
result[i] = nums[j];
break;
}
}
if (j == nums.length)
result[i] = -1;
}
return result;
}
public static void main(String[] args) {
int[] nums1 = {2, 4};
int[] nums2 = {1, 2, 3, 4};
int[] result = nextGreaterElement(nums1, nums2);
for (int n : result) {
System.out.print(n + " ");
}
System.out.println();
}
}
时间复杂度:O(mn),其中m,n分别是两个数组的长度。