Skip to content

Commit 4fc7b37

Browse files
committed
feat: add solutions to lcof problems: No.32.1,32.2
1 parent 86abbc9 commit 4fc7b37

File tree

16 files changed

+436
-378
lines changed

16 files changed

+436
-378
lines changed

lcof/面试题30. 包含min函数的栈/README.md

+52-55
Original file line numberDiff line numberDiff line change
@@ -50,30 +50,27 @@ minStack.min(); --> 返回 -2.
5050
```python
5151
class MinStack:
5252
def __init__(self):
53-
"""
54-
initialize your data structure here.
55-
"""
56-
self.s = []
57-
self.mins = [inf]
53+
self.stk1 = []
54+
self.stk2 = [inf]
5855

59-
def push(self, val: int) -> None:
60-
self.s.append(val)
61-
self.mins.append(min(self.mins[-1], val))
56+
def push(self, x: int) -> None:
57+
self.stk1.append(x)
58+
self.stk2.append(min(x, self.stk2[-1]))
6259

6360
def pop(self) -> None:
64-
self.s.pop()
65-
self.mins.pop()
61+
self.stk1.pop()
62+
self.stk2.pop()
6663

6764
def top(self) -> int:
68-
return self.s[-1]
65+
return self.stk1[-1]
6966

7067
def getMin(self) -> int:
71-
return self.mins[-1]
68+
return self.stk2[-1]
7269

7370

7471
# Your MinStack object will be instantiated and called as such:
7572
# obj = MinStack()
76-
# obj.push(val)
73+
# obj.push(x)
7774
# obj.pop()
7875
# param_3 = obj.top()
7976
# param_4 = obj.getMin()
@@ -165,48 +162,6 @@ private:
165162
*/
166163
```
167164

168-
### **TypeScript**
169-
170-
```ts
171-
class MinStack {
172-
stack: number[];
173-
mins: number[];
174-
constructor() {
175-
this.stack = [];
176-
this.mins = [];
177-
}
178-
179-
push(x: number): void {
180-
this.stack.push(x);
181-
this.mins.push(Math.min(this.getMin(), x));
182-
}
183-
184-
pop(): void {
185-
this.stack.pop();
186-
this.mins.pop();
187-
}
188-
189-
top(): number {
190-
return this.stack[this.stack.length - 1];
191-
}
192-
193-
getMin(): number {
194-
return this.mins.length == 0
195-
? Infinity
196-
: this.mins[this.mins.length - 1];
197-
}
198-
}
199-
200-
/**
201-
* Your MinStack object will be instantiated and called as such:
202-
* var obj = new MinStack()
203-
* obj.push(x)
204-
* obj.pop()
205-
* var param_3 = obj.top()
206-
* var param_4 = obj.getMin()
207-
*/
208-
```
209-
210165
### **Go**
211166

212167
```go
@@ -255,6 +210,48 @@ func min(a, b int) int {
255210
*/
256211
```
257212

213+
### **TypeScript**
214+
215+
```ts
216+
class MinStack {
217+
stack: number[];
218+
mins: number[];
219+
constructor() {
220+
this.stack = [];
221+
this.mins = [];
222+
}
223+
224+
push(x: number): void {
225+
this.stack.push(x);
226+
this.mins.push(Math.min(this.getMin(), x));
227+
}
228+
229+
pop(): void {
230+
this.stack.pop();
231+
this.mins.pop();
232+
}
233+
234+
top(): number {
235+
return this.stack[this.stack.length - 1];
236+
}
237+
238+
getMin(): number {
239+
return this.mins.length == 0
240+
? Infinity
241+
: this.mins[this.mins.length - 1];
242+
}
243+
}
244+
245+
/**
246+
* Your MinStack object will be instantiated and called as such:
247+
* var obj = new MinStack()
248+
* obj.push(x)
249+
* obj.pop()
250+
* var param_3 = obj.top()
251+
* var param_4 = obj.getMin()
252+
*/
253+
```
254+
258255
### **Rust**
259256

260257
```rust

lcof/面试题32 - I. 从上到下打印二叉树/README.md

+104-83
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@
3131

3232
## 解法
3333

34+
**方法一:BFS**
35+
36+
我们可以通过 BFS 遍历二叉树,将每一层的节点值存入数组中,最后返回数组即可。
37+
38+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为二叉树的节点数。
39+
3440
<!-- tabs:start -->
3541

3642
### **Python3**
@@ -46,21 +52,19 @@
4652

4753
class Solution:
4854
def levelOrder(self, root: TreeNode) -> List[int]:
55+
ans = []
4956
if root is None:
50-
return []
51-
q = deque()
52-
q.append(root)
53-
res = []
57+
return ans
58+
q = deque([root])
5459
while q:
55-
size = len(q)
56-
for _ in range(size):
60+
for _ in range(len(q)):
5761
node = q.popleft()
58-
res.append(node.val)
62+
ans.append(node.val)
5963
if node.left:
6064
q.append(node.left)
6165
if node.right:
6266
q.append(node.right)
63-
return res
67+
return ans
6468
```
6569

6670
### **Java**
@@ -77,116 +81,133 @@ class Solution:
7781
*/
7882
class Solution {
7983
public int[] levelOrder(TreeNode root) {
80-
if (root == null) return new int[] {};
84+
if (root == null) {
85+
return new int[] {};
86+
}
8187
Deque<TreeNode> q = new ArrayDeque<>();
82-
List<Integer> t = new ArrayList<>();
8388
q.offer(root);
89+
List<Integer> res = new ArrayList<>();
8490
while (!q.isEmpty()) {
85-
int size = q.size();
86-
while (size-- > 0) {
91+
for (int n = q.size(); n > 0; --n) {
8792
TreeNode node = q.poll();
88-
t.add(node.val);
89-
if (node.left != null) q.offer(node.left);
90-
if (node.right != null) q.offer(node.right);
93+
res.add(node.val);
94+
if (node.left != null) {
95+
q.offer(node.left);
96+
}
97+
if (node.right != null) {
98+
q.offer(node.right);
99+
}
91100
}
92101
}
93-
int i = 0, n = t.size();
94-
int[] res = new int[n];
95-
for (Integer e : t) {
96-
res[i++] = e;
102+
int[] ans = new int[res.size()];
103+
for (int i = 0; i < ans.length; ++i) {
104+
ans[i] = res.get(i);
97105
}
98-
return res;
106+
return ans;
99107
}
100108
}
101109
```
102110

103-
### **JavaScript**
111+
### **C++**
104112

105-
```js
113+
```cpp
106114
/**
107115
* Definition for a binary tree node.
108-
* function TreeNode(val) {
109-
* this.val = val;
110-
* this.left = this.right = null;
111-
* }
112-
*/
113-
/**
114-
* @param {TreeNode} root
115-
* @return {number[]}
116+
* struct TreeNode {
117+
* int val;
118+
* TreeNode *left;
119+
* TreeNode *right;
120+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
121+
* };
116122
*/
117-
var levelOrder = function (root) {
118-
if (!root) return [];
119-
let queue = [root];
120-
let res = [];
121-
while (queue.length) {
122-
let node = queue.shift();
123-
if (!node) continue;
124-
res.push(node.val);
125-
queue.push(node.left, node.right);
123+
class Solution {
124+
public:
125+
vector<int> levelOrder(TreeNode* root) {
126+
if (!root) {
127+
return {};
128+
}
129+
vector<int> ans;
130+
queue<TreeNode*> q{{root}};
131+
while (!q.empty()) {
132+
for (int n = q.size(); n; --n) {
133+
auto node = q.front();
134+
q.pop();
135+
ans.push_back(node->val);
136+
if (node->left) {
137+
q.push(node->left);
138+
}
139+
if (node->right) {
140+
q.push(node->right);
141+
}
142+
}
143+
}
144+
return ans;
126145
}
127-
return res;
128146
};
129147
```
130148
131149
### **Go**
132150
133151
```go
134-
func levelOrder(root *TreeNode) []int {
152+
/**
153+
* Definition for a binary tree node.
154+
* type TreeNode struct {
155+
* Val int
156+
* Left *TreeNode
157+
* Right *TreeNode
158+
* }
159+
*/
160+
func levelOrder(root *TreeNode) (ans []int) {
135161
if root == nil {
136-
return []int{}
162+
return
137163
}
138-
q := []*TreeNode{}
139-
q = append(q, root)
140-
// 层序遍历,用队列,遍历到谁,就把谁的左右结点加入队列
141-
res := []int{}
142-
for len(q) != 0 {
143-
tmp := q[0]
144-
q = q[1:]
145-
res = append(res, tmp.Val)
146-
if tmp.Left != nil {
147-
q = append(q, tmp.Left)
148-
}
149-
if tmp.Right != nil {
150-
q = append(q, tmp.Right)
164+
q := []*TreeNode{root}
165+
for len(q) > 0 {
166+
for n := len(q); n > 0; n-- {
167+
node := q[0]
168+
q = q[1:]
169+
ans = append(ans, node.Val)
170+
if node.Left != nil {
171+
q = append(q, node.Left)
172+
}
173+
if node.Right != nil {
174+
q = append(q, node.Right)
175+
}
151176
}
152177
}
153-
return res
178+
return
154179
}
155180
```
156181

157-
### **C++**
182+
### **JavaScript**
158183

159-
```cpp
184+
```js
160185
/**
161186
* Definition for a binary tree node.
162-
* struct TreeNode {
163-
* int val;
164-
* TreeNode *left;
165-
* TreeNode *right;
166-
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
167-
* };
187+
* function TreeNode(val) {
188+
* this.val = val;
189+
* this.left = this.right = null;
190+
* }
168191
*/
169-
class Solution {
170-
public:
171-
vector<int> levelOrder(TreeNode* root) {
172-
vector<int> res;
173-
queue<TreeNode*> q;
174-
if (root != nullptr) {
175-
q.push(root);
176-
}
177-
while (!q.empty()) {
178-
TreeNode* node = q.front();
179-
q.pop();
180-
if (node->left != nullptr) {
181-
q.push(node->left);
182-
}
183-
if (node->right != nullptr) {
184-
q.push(node->right);
185-
}
186-
res.push_back(node->val);
192+
/**
193+
* @param {TreeNode} root
194+
* @return {number[]}
195+
*/
196+
var levelOrder = function (root) {
197+
if (!root) {
198+
return [];
199+
}
200+
const q = [root];
201+
const ans = [];
202+
while (q.length) {
203+
for (let n = q.length; n; --n) {
204+
const { val, left, right } = q.shift();
205+
ans.push(val);
206+
left && q.push(left);
207+
right && q.push(right);
187208
}
188-
return res;
189209
}
210+
return ans;
190211
};
191212
```
192213

0 commit comments

Comments
 (0)