第496题:
给定两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。找到 nums1 中每个元素在 nums2 中的下一个比其大的值。
nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。来源:力扣(LeetCode)
1、nums1是nums2的子集,我们需要在nums2中寻找nums1内元素后面的第一个比自己大的值,然后存入数组是输出;
可以利用哈希表来存储此元素和此元素后面第一个比自身大的元素,例如(1,2),将1,2 作为一个键值对put 到map中;
然后利用栈来寻找每个元素和第一个比它大的元素,遍历数组,首个元素入栈,下一个元素如果大于前个元素,就将前个元素出栈,并且将两元素作为键值对加进map;
如果后一元素不比前一元素大,就将该元素也入栈,最后先得出后面存在比自身大的元素,然后将不存在的元素和-1组合作为键值对加入map;
最后遍历nums1,将键对应的值加入结果数组中。
第503题:
给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。来源:力扣(LeetCode)
1、和上题差不多,不过现在是一个循环数组,且是求每一个元素下一个比它大的元素,主要是循环数组,说明数组最后的这个元素的后面不一定没有比它大的元素;
解决方法可以将数组复制一份,两端相同的数组就可以将每个数后面的比它大的数找出来了;
利用栈来比较每个数和它后面的数的大小,大就将这个大的数数存入结果数组,且自己出栈,不大就不出栈;
依次得到结果。