Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
努力学Java的新人
Fucking Algorithm
提交
a8252cb3
F
Fucking Algorithm
项目概览
努力学Java的新人
/
Fucking Algorithm
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Fucking Algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
a8252cb3
编写于
3月 13, 2021
作者:
B
BruceCat
提交者:
GitHub
3月 13, 2021
浏览文件
操作
浏览文件
下载
差异文件
【496.下一个更大元素I】
【496.下一个更大元素I】
上级
1746166c
b09dc336
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
58 addition
and
2 deletion
+58
-2
数据结构系列/单调栈.md
数据结构系列/单调栈.md
+58
-2
未找到文件。
数据结构系列/单调栈.md
浏览文件 @
a8252cb3
...
...
@@ -182,8 +182,64 @@ vector<int> nextGreaterElements(vector<int>& nums) {
</p>
======其他语言代码======
### java
[
ZakAnun
](
https://github.com/ZakAnun
)
提供代码
```
java
// 496.下一个更大元素
// 暴力解法
public
int
[]
nextGreaterElement
(
int
[]
nums1
,
int
[]
nums2
)
{
int
[]
result
=
new
int
[
nums1
.
length
];
for
(
int
i
=
0
;
i
<
nums1
.
length
;
i
++)
{
// 需要记录第一个数组每个元素在第二个数组中出现的位置
int
index
=
0
;
for
(
int
j
=
0
;
j
<
nums2
.
length
;
j
++)
{
if
(
nums1
[
i
]
==
nums2
[
j
])
{
index
=
j
;
break
;
}
}
// 根据找到的位置往后遍历,若符合条件则记录到结果数组
for
(
int
k
=
index
;
k
<
nums2
.
length
;
k
++)
{
if
(
nums2
[
k
]
>
nums1
[
i
])
{
result
[
i
]
=
nums2
[
k
];
break
;
}
}
// 判断若对应位置结果依然为默认值,则将其修改为 -1
if
(
result
[
i
]
==
0
)
{
result
[
i
]
=
-
1
;
}
}
return
result
;
}
// 分析: 暴力解法中需要确定数组1中每个元素在数组2中的下标而需要进行额外的遍历导致时间复杂度升高,
// 但若能够先罗列出全部的结果,然后从结果集中获取数组1中每个元素对应的下一个更大元素,就可以节省这部分时间(这里需要引用 HashMap 帮助我们记录结果,以便根据数组1获取。
// 单调栈解法
public
int
[]
nextGreaterElement
(
int
[]
nums1
,
int
[]
nums2
)
{
Stack
<
Integer
>
stack
=
new
Stack
<>();
HashMap
<
Integer
,
Integer
>
map
=
new
HashMap
<>();
int
[]
result
=
new
int
[
nums1
.
length
];
for
(
int
value
:
nums2
)
{
while
(!
stack
.
empty
()
&&
value
>
stack
.
peek
())
{
map
.
put
(
stack
.
pop
(),
value
);
}
stack
.
push
(
value
);
}
while
(!
stack
.
empty
())
{
map
.
put
(
stack
.
pop
(),
-
1
);
}
for
(
int
i
=
0
;
i
<
nums1
.
length
;
i
++)
{
result
[
i
]
=
map
.
get
(
nums1
[
i
]);
}
return
result
;
}
```
```
java
// 739. Daily Temperatures
class
Solution
{
...
...
@@ -202,5 +258,4 @@ class Solution {
return
ans
;
}
}
```
```
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录