当前位置: 面试刷题>> 下一个更大的元素 (经典算法题500道)


### 题目描述补充 **题目:下一个更大的元素 I** 给定两个没有重复元素的数组 `nums1` 和 `nums2`,其中 `nums1` 是 `nums2` 的子集(即 `nums1` 中的每个元素都一定可以在 `nums2` 中找到)。现在,对于 `nums1` 中的每个元素,找出在 `nums2` 中它的下一个比它大的元素。`nums1` 和 `nums2` 中的元素均为唯一的。 **示例 1**: ``` 输入: nums1 = [4,1,2], nums2 = [1,3,4,2]. 输出: [-1,3,-1] 解释: 对于 nums1 中的数字 4,你无法在 nums2 中找到下一个更大的数字,因此输出 -1。 对于 nums1 中的数字 1,下一个更大的数字是 3。 对于 nums1 中的数字 2,你无法在 nums2 中找到下一个更大的数字,因此输出 -1。 ``` **示例 2**: ``` 输入: nums1 = [2,4], nums2 = [1,2,3,4]. 输出: [3,-1] 解释: 对于 nums1 中的数字 2,下一个更大的数字是 3。 对于 nums1 中的数字 4,你无法在 nums2 中找到下一个更大的数字,因此输出 -1。 ``` ### PHP 示例代码 ```php function nextGreaterElement($nums1, $nums2) { $stack = []; // 用于存储nums2的索引 $nextGreater = array_fill(0, count($nums2), -1); // 初始化nextGreater数组,默认值为-1 $numMap = array_flip($nums2); // 创建nums2的键值对映射,用于快速查找 foreach ($nums2 as $i => $num) { while (!empty($stack) && $num > $nums2[end($stack)]) { $nextGreater[array_pop($stack)] = $num; } $stack[] = $i; } $result = []; foreach ($nums1 as $num) { $result[] = $nextGreater[$numMap[$num]]; } return $result; } // 测试 $nums1 = [4, 1, 2]; $nums2 = [1, 3, 4, 2]; print_r(nextGreaterElement($nums1, $nums2)); ``` ### Python 示例代码 ```python def nextGreaterElement(nums1, nums2): stack = [] nextGreater = {num: -1 for num in nums2} for num in nums2: while stack and num > nums2[stack[-1]]: nextGreater[nums2[stack.pop()]] = num stack.append(len(nums2) - 1 - nums2[::-1].index(num)) return [nextGreater[num] for num in nums1] # 测试 nums1 = [4, 1, 2] nums2 = [1, 3, 4, 2] print(nextGreaterElement(nums1, nums2)) ``` ### JavaScript 示例代码 ```javascript function nextGreaterElement(nums1, nums2) { const stack = []; const nextGreater = {}; for (const num of nums2) { nextGreater[num] = -1; } for (let i = 0; i < nums2.length; i++) { while (stack.length > 0 && nums2[i] > nums2[stack[stack.length - 1]]) { nextGreater[nums2[stack.pop()]] = nums2[i]; } stack.push(i); } return nums1.map(num => nextGreater[num]); } // 测试 const nums1 = [4, 1, 2]; const nums2 = [1, 3, 4, 2]; console.log(nextGreaterElement(nums1, nums2)); ``` 码小课网站中有更多相关内容分享给大家学习,包括算法基础、数据结构、面试技巧等,帮助大家提升编程能力和面试成功率。