-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path155.最小栈.php
151 lines (136 loc) · 3.62 KB
/
155.最小栈.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
<?php
/*
* @lc app=leetcode.cn id=155 lang=php
*
* [155] 最小栈
*
* https://leetcode-cn.com/problems/min-stack/description/
*
* algorithms
* Easy (56.62%)
* Likes: 913
* Dislikes: 0
* Total Accepted: 241K
* Total Submissions: 424.4K
* Testcase Example: '["MinStack","push","push","push","getMin","pop","top","getMin"]\n[[],[-2],[0],[-3],[],[],[],[]]'
*
* 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
*
*
* push(x) —— 将元素 x 推入栈中。
* pop() —— 删除栈顶的元素。
* top() —— 获取栈顶元素。
* getMin() —— 检索栈中的最小元素。
*
*
*
*
* 示例:
*
* 输入:
* ["MinStack","push","push","push","getMin","pop","top","getMin"]
* [[],[-2],[0],[-3],[],[],[],[]]
*
* 输出:
* [null,null,null,null,-3,null,0,-2]
*
* 解释:
* MinStack minStack = new MinStack();
* minStack.push(-2);
* minStack.push(0);
* minStack.push(-3);
* minStack.getMin(); --> 返回 -3.
* minStack.pop();
* minStack.top(); --> 返回 0.
* minStack.getMin(); --> 返回 -2.
*
*
*
*
* 提示:
*
*
* pop、top 和 getMin 操作总是在 非空栈 上调用。
*
*
*/
// @lc code=start
class MinStack
{
protected $val;
// protected $count;
/**
* initialize your data structure here.
*/
public function __construct()
{
$this->val = [];
// $this->count = -1;
}
/*
["MinStack","push","push","push","top","pop","getMin","pop","getMin","pop","push","top","getMin","push","top","getMin","pop","getMin"]\n
[[],[2147483646],[2147483646],[2147483647],[],[],[],[],[],[],[2147483647],[],[],[-2147483648],[],[],[],[]]
*/
// my
// [null,null,null,null,2147483647,null,2147483646,null,2147483646,null,null,,2147483647,null,,-2147483648,null,-2147483648]
// my2
// [null,null,null,null,2147483647,null,2147483646,null,2147483646,null,null,2147483647,2147483646,null,-2147483648,-2147483648,null,2147483646]
// Expected Answer
// [null,null,null,null,2147483647,null,2147483646,null,2147483646,null,null,2147483647,2147483647,null,-2147483648,-2147483648,null,2147483647]
// [null,null,null,null,2147483647,null,2147483646,null,2147483646,null,null,2147483647,2147483647,null,-2147483648,-2147483648,null,2147483647]
/**
* @param Integer $val
* @return NULL
*/
public function push($val)
{
$this->val[] = $val;
// $this->count++;
// var_dump($this->val);
// return array_push($this->$val, $val);
}
/**
* @return NULL
*/
public function pop()
{
// $this->val = array_slice($this->val, 0, $this->count - 1);
// var_dump($this->val);
// var_dump($this->val);
// unset($this->val[$this->count]);
array_pop($this->val);
// var_dump($this->val);
// $this->val = array_values($this->val);
// var_dump($this->val);
// $this->count--;
}
/**
* @return Integer
*/
public function top()
{
// var_dump($this->val);
// return $this->val[$this->count];
// return $this->val[max(array_keys($this->val))];
$item = array_pop($this->val);
// return top($this->val);
$this->val[] = $item; // 再还回去
return $item;
}
/**
* @return Integer
*/
public function getMin()
{
return min($this->val);
}
}
/**
* Your MinStack object will be instantiated and called as such:
* $obj = MinStack();
* $obj->push($val);
* $obj->pop();
* $ret_3 = $obj->top();
* $ret_4 = $obj->getMin();
*/
// @lc code=end