leetcode单调栈-下一个最大元素
  TEZNKK3IfmPf 2023年11月15日 15 0
import java.util.Stack;

/**
<p><code>nums1</code>&nbsp;中数字&nbsp;<code>x</code>&nbsp;的 <strong>下一个更大元素</strong> 是指&nbsp;<code>x</code>&nbsp;在&nbsp;<code>nums2</code> 中对应位置 <strong>右侧</strong> 的 <strong>第一个</strong> 比&nbsp;<code>x</code><strong>&nbsp;</strong>大的元素。</p>

<p>给你两个<strong> 没有重复元素</strong> 的数组&nbsp;<code>nums1</code> 和&nbsp;<code>nums2</code> ,下标从 <strong>0</strong> 开始计数,其中<code>nums1</code>&nbsp;是&nbsp;<code>nums2</code>&nbsp;的子集。</p>

<p>对于每个 <code>0 <= i < nums1.length</code> ,找出满足 <code>nums1[i] == nums2[j]</code> 的下标 <code>j</code> ,并且在 <code>nums2</code> 确定 <code>nums2[j]</code> 的 <strong>下一个更大元素</strong> 。如果不存在下一个更大元素,那么本次查询的答案是 <code>-1</code> 。</p>

<p>返回一个长度为&nbsp;<code>nums1.length</code> 的数组<em> </em><code>ans</code><em> </em>作为答案,满足<em> </em><code>ans[i]</code><em> </em>是如上所述的 <strong>下一个更大元素</strong> 。</p>

<p>&nbsp;</p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>nums1 = [4,1,2], nums2 = [1,3,4,2].
<strong>输出:</strong>[-1,3,-1]
<strong>解释:</strong>nums1 中每个值的下一个更大元素如下所述:
- 4 ,用加粗斜体标识,nums2 = [1,3,<strong>4</strong>,2]。不存在下一个更大元素,所以答案是 -1 。
- 1 ,用加粗斜体标识,nums2 = [<em><strong>1</strong></em>,3,4,2]。下一个更大元素是 3 。
- 2 ,用加粗斜体标识,nums2 = [1,3,4,<em><strong>2</strong></em>]。不存在下一个更大元素,所以答案是 -1 。</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums1 = [2,4], nums2 = [1,2,3,4].
<strong>输出:</strong>[3,-1]
<strong>解释:</strong>nums1 中每个值的下一个更大元素如下所述:
- 2 ,用加粗斜体标识,nums2 = [1,<em><strong>2</strong></em>,3,4]。下一个更大元素是 3 。
- 4 ,用加粗斜体标识,nums2 = [1,2,3,<em><strong>4</strong></em>]。不存在下一个更大元素,所以答案是 -1 。
</pre>

<p>&nbsp;</p>

<p><strong>提示:</strong></p>

<ul>
<li><code>1 <= nums1.length <= nums2.length <= 1000</code></li>
<li><code>0 <= nums1[i], nums2[i] <= 10<sup>4</sup></code></li>
<li><code>nums1</code>和<code>nums2</code>中所有整数 <strong>互不相同</strong></li>
<li><code>nums1</code> 中的所有整数同样出现在 <code>nums2</code> 中</li>
</ul>

<p>&nbsp;</p>

<p><strong>进阶:</strong>你可以设计一个时间复杂度为 <code>O(nums1.length + nums2.length)</code> 的解决方案吗?</p>
<div><div>Related Topics</div><div><li>栈</li><li>数组</li><li>哈希表</li><li>单调栈</li></div></div><br><div><li>???? 697</li><li>???? 0</li></div>
*/

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public int[] nextGreaterElement(int[] nums1, int[] nums2) {
int[] res = new int[nums2.length];
Stack<Integer> s = new Stack<>();
for (int i = nums2.length-1; i >= 0; i--) {
while (!s.isEmpty() && s.peek() <= nums2[i]) {
s.pop();
}
res[i] = (s.isEmpty() ||nums2[i] >= s.peek()) ?-1: s.peek() ;
s.push(nums2[i]);
}

//转化一下n1 对应值在 n2中的位置
int[] pos = new int[nums1.length];
for (int i = 0; i < nums1.length; i++) {
for (int j = 0; j < nums2.length; j++) {
if(nums1[i]==nums2[j]){
pos[i]=j;
continue;
}
}
}
for (int i = 0; i < pos.length; i++) {
pos[i] =res[pos[i]];
}
return pos;

}
}
//leetcode submit region end(Prohibit modification and deletion)

不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!




【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月15日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年05月17日   43   0   0 算法数组
  TEZNKK3IfmPf   2024年05月17日   33   0   0 数组php
TEZNKK3IfmPf