题目描述
给定两个没有重复元素的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出-1。
示例
输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
对于num1中的数字2,第二个数组中的下一个较大数字是3。
对于num1中的数字4,第二个数组中没有下一个更大的数字,因此输出 -1。
针对示例需要说明下,题目中所说的右边第一个元素并不是指紧邻元素右边第一个坐标下是否存在更大的元素,也是在第一次提交题目时,才明白题意(题目描述有点bug)
例如:输入nums1: [1,3,5,2,4] 输入nums2:[6,5,4,3,2,1,7]
结果应为:[7,7,7,7,7]
解题思路
针对该题所首先想到的就是暴力求解,即从遍历两个数组寻找 nums2 中右边第一个大的元素。
public int[] nextGreaterElement_2(int[] nums1, int[] nums2) {
int[] result = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
result[i] = -1;
int tempIndex = Integer.MAX_VALUE;
for (int j = 0; j < nums2.length; j++) {
if (nums1[i] == nums2[j]) {
tempIndex = j;
}
if (nums2[j] > nums1[i] && j > tempIndex) {
result[i] = nums2[j];
break;
}
}
}
return result;
}