【LeetCode】下一个更大元素 IJava 题解
题目描述
给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中 nums1 是 nums2 的子集。
请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。
复制代码
代码思路
今天的每日一题,题目简单明了,我们可以采用朴素算法求解,比较容易想到的优化思路是利用 hashMap 提升查询的效率。
在朴素解法中,我们采用 hashMap 记录每一个 nums2 值和下标位置,方便比较。
通过朴素算法,发现有很多的重复计算,因此,应该先求出 num2 的下一个更大的元素,在这个单调的区间,使用栈这种数据结构,可以提升计算的效率。代码如下:
通过代码
朴素解法
复制代码
栈解法
复制代码
总结
朴素解法的时间复杂度是 O(n * n), 空间复杂度是 O(n)
栈解法的时间复杂度是 O(n), 空间复杂度是 O(n)
坚持算法每日一题,加油!
版权声明: 本文为 InfoQ 作者【HQ数字卡】的原创文章。
原文链接:【http://xie.infoq.cn/article/5bdf2be3b261451eb9d8baded】。文章转载请联系作者。
评论