File tree Expand file tree Collapse file tree 2 files changed +57
-0
lines changed Expand file tree Collapse file tree 2 files changed +57
-0
lines changed Original file line number Diff line number Diff line change 80
80
474. 一和零
81
81
491. 递增子序列
82
82
494. 目标和
83
+ 496. 下一个更大元素 I
83
84
509. 斐波那契数
84
85
516. 最长回文子序列
85
86
518. 零钱兑换 II
Original file line number Diff line number Diff line change
1
+ // 496. 下一个更大元素 I
2
+
3
+
4
+ /*
5
+ 暴力:
6
+ 1、初始化结果数组为-1,表示不存在的情况
7
+ 2、两个for循环遍历数组,flag标记表示找到了nums1的x在nums2的位置,再往后遍历时比x大就记录该值
8
+ */
9
+ class Solution {
10
+ public int [] nextGreaterElement (int [] nums1 , int [] nums2 ) {
11
+ int n = nums1 .length , m = nums2 .length ;
12
+ int [] res = new int [n ];
13
+ Arrays .fill (res , -1 );
14
+ for (int i = 0 ; i < n ; i ++) {
15
+ boolean flag = false ;
16
+ for (int j = 0 ; j < m ; j ++) {
17
+ if (nums1 [i ] == nums2 [j ]) {
18
+ flag = true ;
19
+ }
20
+ if (flag && nums1 [i ] < nums2 [j ]) {
21
+ res [i ] = nums2 [j ];
22
+ break ;
23
+ }
24
+ }
25
+ }
26
+ return res ;
27
+ }
28
+ }
29
+
30
+
31
+ /*
32
+ 单调递减栈:
33
+ 1、从右到左遍历nums2数组,获取每个元素的下一个更大元素
34
+ 1)栈不为空 且 当前元素大于等于栈顶元素,则栈顶元素出栈,循环处理,直到当前元素小于栈顶元素,那么栈顶元素就是当前元素的下一个更大元素
35
+ 2)记录当前元素的下一个更大元素到map中,当前元素入栈
36
+ 2、遍历nums1数组,直接从map中获取当前元素的下一个更大元素,存入结果数组,返回结果
37
+ */
38
+ class Solution {
39
+ public int [] nextGreaterElement (int [] nums1 , int [] nums2 ) {
40
+ Map <Integer , Integer > map = new HashMap <>();
41
+ Deque <Integer > stack = new ArrayDeque <>();
42
+ for (int i = nums2 .length - 1 ; i >= 0 ; i --) {
43
+ while (!stack .isEmpty () && nums2 [i ] >= stack .peek ()) {
44
+ stack .pop ();
45
+ }
46
+ map .put (nums2 [i ], stack .isEmpty () ? -1 : stack .peek ());
47
+ stack .push (nums2 [i ]);
48
+ }
49
+ int n = nums1 .length ;
50
+ int [] res = new int [n ];
51
+ for (int i = 0 ; i < n ; i ++) {
52
+ res [i ] = map .get (nums1 [i ]);
53
+ }
54
+ return res ;
55
+ }
56
+ }
You can’t perform that action at this time.
0 commit comments