496. 下一个更大元素 I【我亦无他唯手熟尔】

简介: 496. 下一个更大元素 I【我亦无他唯手熟尔】

496. 下一个更大元素 I

给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。
请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
示例 1:
输入: nums1 = [4,1,2], nums2 = [1,3,4,2].
输出: [-1,3,-1]
解释:
    对于 num1 中的数字 4 ,你无法在第二个数组中找到下一个更大的数字,因此输出 -1 。
    对于 num1 中的数字 1 ,第二个数组中数字1右边的下一个较大数字是 3 。
    对于 num1 中的数字 2 ,第二个数组中没有下一个更大的数字,因此输出 -1 。
示例 2:
输入: nums1 = [2,4], nums2 = [1,2,3,4].
输出: [3,-1]
解释:
    对于 num1 中的数字 2 ,第二个数组中的下一个较大数字是 3 。
    对于 num1 中的数字 4 ,第二个数组中没有下一个更大的数字,因此输出 -1 。
提示:
1 <= nums1.length <= nums2.length <= 1000
0 <= nums1[i], nums2[i] <= 104
nums1和nums2中所有整数 互不相同
nums1 中的所有整数同样出现在 nums2 中
进阶:你可以设计一个时间复杂度为 O(nums1.length + nums2.length) 的解决方案吗?

我的答案

首先,结果数组的长度和nums1的长度一样
思路一
遍历nums1数组
  依次遍历nums2数组中找到对应的位置,做个标记flag=1
  在之后的遍历中找到第一个比它大的值,添加到结果数组中,break
  nums完全遍历,说明没有找到,把-1添加到结果数组中
class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int[] result=new int[nums1.length];
        for (int i = 0; i < nums1.length; i++) {
            int flag=0;
            int j;
            for (j=0;j<nums2.length;j++){
                if (nums2[j]==nums1[i]){
                    flag=1;
                }
                if (nums2[j]>nums1[i]&&flag==1){
                    result[i]=nums2[j];
                    break;
                }
            }
            if (j==nums2.length){
                result[i]=-1;
            }
        }
        return result;
    }
}
首先,结果数组的长度和nums1的长度一样
思路一是从左到右遍历nums2,也可以从右至左
思路二
遍历nums1数组
  依次从右至左遍历nums2,找到比它大的值赋给bigger
  数组中找到对应的位置就break
把bigger添加到结果数组中
如果没有break跳出,即完全遍历nums2数组
把bigger初始值-1添加到结果数组中
class Solution {
    public int[] nextGreaterElement(int[] nums1, int[] nums2) {
        int[] result=new int[nums1.length];
        for (int i = 0; i < nums1.length; i++) {
            int j;
            int bigger=-1;
            for (j=nums2.length-1;j>0;j--){
                if (nums2[j]==nums1[i]){
                    break;
                }
                if (nums2[j]>nums1[i]){
                    bigger=nums2[j];
                }
            }
            result[i]=bigger;
        }
        return result;
    }
}
相关文章
|
10月前
1446. 连续字符【我亦无他唯手熟尔】
1446. 连续字符【我亦无他唯手熟尔】
27 0
|
10月前
598. 范围求和 II【我亦无他唯手熟尔】
598. 范围求和 II【我亦无他唯手熟尔】
31 0
|
10月前
260. 只出现一次的数字 III【我亦无他唯手熟尔】
260. 只出现一次的数字 III【我亦无他唯手熟尔】
25 0
|
10月前
1929. 数组串联【我亦无他唯手熟尔】
1929. 数组串联【我亦无他唯手熟尔】
21 0
|
10月前
|
算法
268. 丢失的数字【我亦无他唯手熟尔】
268. 丢失的数字【我亦无他唯手熟尔】
27 0
|
10月前
|
算法
136 137 260只出现一次的数字【我亦无他唯手熟尔】
136 137 260只出现一次的数字【我亦无他唯手熟尔】
50 0
|
10月前
400. 第 N 位数字【我亦无他唯手熟尔】
400. 第 N 位数字【我亦无他唯手熟尔】
32 0
|
10月前
136. 只出现一次的数字【我亦无他唯手熟尔】
136. 只出现一次的数字【我亦无他唯手熟尔】
39 0
|
11月前
用试题这把“剑“帮你破除指针与数组之间的那些猫腻
用试题这把“剑“帮你破除指针与数组之间的那些猫腻
44 0
哈希表——我欲修仙(功法篇)
哈希表——我欲修仙(功法篇)
92 0

热门文章

最新文章