Skip to content

Commit b0e52a6

Browse files
committed
feat: update solutions to lc problem: No.1441
No.1441.Build an Array With Stack Operations
1 parent d64815c commit b0e52a6

File tree

6 files changed

+79
-102
lines changed

6 files changed

+79
-102
lines changed

solution/1400-1499/1441.Build an Array With Stack Operations/README.md

Lines changed: 33 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,16 @@
6363

6464
<!-- 这里可写通用的实现逻辑 -->
6565

66+
**方法一:模拟**
67+
68+
我们定义 $cur$ 表示当前已经从 `list` 中读取到的数字,初始时 $cur = 0$,用一个数组 $ans$ 存储答案。
69+
70+
遍历数组 `target`,对于每个数字 $v$,如果当前要从 `list` 读取的数字小于 $v$,那么我们应该执行 `Push``Pop` 操作,直到读取的数字等于 $v$,然后执行 `Push` 操作,这样就可以得到数字 $v$。
71+
72+
遍历结束后,也就构建出了数组 `target`,返回 `ans` 即可。
73+
74+
时间复杂度 $O(n)$,其中 $n$ 为数组 `target` 的长度。忽略答案的空间消耗,空间复杂度 $O(1)$。
75+
6676
<!-- tabs:start -->
6777

6878
### **Python3**
@@ -72,14 +82,13 @@
7282
```python
7383
class Solution:
7484
def buildArray(self, target: List[int], n: int) -> List[str]:
75-
cur, ans = 1, []
76-
for t in target:
77-
for i in range(cur, n + 1):
78-
ans.append('Push')
79-
if t == i:
80-
cur = i + 1
81-
break
82-
ans.append('Pop')
85+
cur, ans = 0, []
86+
for v in target:
87+
cur += 1
88+
while cur < v:
89+
ans.extend(['Push', 'Pop'])
90+
cur += 1
91+
ans.append('Push')
8392
return ans
8493
```
8594

@@ -90,17 +99,14 @@ class Solution:
9099
```java
91100
class Solution {
92101
public List<String> buildArray(int[] target, int n) {
102+
int cur = 0;
93103
List<String> ans = new ArrayList<>();
94-
int cur = 1;
95-
for (int t : target) {
96-
for (int i = cur; i <= n; ++i) {
104+
for (int v : target) {
105+
while (++cur < v) {
97106
ans.add("Push");
98-
if (t == i) {
99-
cur = i + 1;
100-
break;
101-
}
102107
ans.add("Pop");
103108
}
109+
ans.add("Push");
104110
}
105111
return ans;
106112
}
@@ -113,17 +119,14 @@ class Solution {
113119
class Solution {
114120
public:
115121
vector<string> buildArray(vector<int>& target, int n) {
122+
int cur = 0;
116123
vector<string> ans;
117-
int cur = 1;
118-
for (int t : target) {
119-
for (int i = cur; i <= n; ++i) {
120-
ans.push_back("Push");
121-
if (t == i) {
122-
cur = i + 1;
123-
break;
124-
}
125-
ans.push_back("Pop");
124+
for (int& v : target) {
125+
while (++cur < v) {
126+
ans.emplace_back("Push");
127+
ans.emplace_back("Pop");
126128
}
129+
ans.emplace_back("Push");
127130
}
128131
return ans;
129132
}
@@ -134,17 +137,13 @@ public:
134137
135138
```go
136139
func buildArray(target []int, n int) []string {
137-
var ans []string
138-
cur := 1
139-
for _, t := range target {
140-
for i := cur; i <= n; i++ {
141-
ans = append(ans, "Push")
142-
if t == i {
143-
cur = i + 1
144-
break
145-
}
146-
ans = append(ans, "Pop")
140+
cur := 0
141+
ans := []string{}
142+
for _, v := range target {
143+
for cur = cur + 1; cur < v; cur++ {
144+
ans = append(ans, "Push", "Pop")
147145
}
146+
ans = append(ans, "Push")
148147
}
149148
return ans
150149
}

solution/1400-1499/1441.Build an Array With Stack Operations/README_EN.md

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,13 @@ The answers that read integer 3 from the stream are not accepted.
8080
```python
8181
class Solution:
8282
def buildArray(self, target: List[int], n: int) -> List[str]:
83-
cur, ans = 1, []
84-
for t in target:
85-
for i in range(cur, n + 1):
86-
ans.append('Push')
87-
if t == i:
88-
cur = i + 1
89-
break
90-
ans.append('Pop')
83+
cur, ans = 0, []
84+
for v in target:
85+
cur += 1
86+
while cur < v:
87+
ans.extend(['Push', 'Pop'])
88+
cur += 1
89+
ans.append('Push')
9190
return ans
9291
```
9392

@@ -96,17 +95,14 @@ class Solution:
9695
```java
9796
class Solution {
9897
public List<String> buildArray(int[] target, int n) {
98+
int cur = 0;
9999
List<String> ans = new ArrayList<>();
100-
int cur = 1;
101-
for (int t : target) {
102-
for (int i = cur; i <= n; ++i) {
100+
for (int v : target) {
101+
while (++cur < v) {
103102
ans.add("Push");
104-
if (t == i) {
105-
cur = i + 1;
106-
break;
107-
}
108103
ans.add("Pop");
109104
}
105+
ans.add("Push");
110106
}
111107
return ans;
112108
}
@@ -119,17 +115,14 @@ class Solution {
119115
class Solution {
120116
public:
121117
vector<string> buildArray(vector<int>& target, int n) {
118+
int cur = 0;
122119
vector<string> ans;
123-
int cur = 1;
124-
for (int t : target) {
125-
for (int i = cur; i <= n; ++i) {
126-
ans.push_back("Push");
127-
if (t == i) {
128-
cur = i + 1;
129-
break;
130-
}
131-
ans.push_back("Pop");
120+
for (int& v : target) {
121+
while (++cur < v) {
122+
ans.emplace_back("Push");
123+
ans.emplace_back("Pop");
132124
}
125+
ans.emplace_back("Push");
133126
}
134127
return ans;
135128
}
@@ -140,17 +133,13 @@ public:
140133
141134
```go
142135
func buildArray(target []int, n int) []string {
143-
var ans []string
144-
cur := 1
145-
for _, t := range target {
146-
for i := cur; i <= n; i++ {
147-
ans = append(ans, "Push")
148-
if t == i {
149-
cur = i + 1
150-
break
151-
}
152-
ans = append(ans, "Pop")
136+
cur := 0
137+
ans := []string{}
138+
for _, v := range target {
139+
for cur = cur + 1; cur < v; cur++ {
140+
ans = append(ans, "Push", "Pop")
153141
}
142+
ans = append(ans, "Push")
154143
}
155144
return ans
156145
}

solution/1400-1499/1441.Build an Array With Stack Operations/Solution.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,14 @@
11
class Solution {
22
public:
33
vector<string> buildArray(vector<int>& target, int n) {
4+
int cur = 0;
45
vector<string> ans;
5-
int cur = 1;
6-
for (int t : target) {
7-
for (int i = cur; i <= n; ++i) {
8-
ans.push_back("Push");
9-
if (t == i) {
10-
cur = i + 1;
11-
break;
12-
}
13-
ans.push_back("Pop");
6+
for (int& v : target) {
7+
while (++cur < v) {
8+
ans.emplace_back("Push");
9+
ans.emplace_back("Pop");
1410
}
11+
ans.emplace_back("Push");
1512
}
1613
return ans;
1714
}
Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,11 @@
11
func buildArray(target []int, n int) []string {
2-
var ans []string
3-
cur := 1
4-
for _, t := range target {
5-
for i := cur; i <= n; i++ {
6-
ans = append(ans, "Push")
7-
if t == i {
8-
cur = i + 1
9-
break
10-
}
11-
ans = append(ans, "Pop")
2+
cur := 0
3+
ans := []string{}
4+
for _, v := range target {
5+
for cur = cur + 1; cur < v; cur++ {
6+
ans = append(ans, "Push", "Pop")
127
}
8+
ans = append(ans, "Push")
139
}
1410
return ans
1511
}

solution/1400-1499/1441.Build an Array With Stack Operations/Solution.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
class Solution {
22
public List<String> buildArray(int[] target, int n) {
3+
int cur = 0;
34
List<String> ans = new ArrayList<>();
4-
int cur = 1;
5-
for (int t : target) {
6-
for (int i = cur; i <= n; ++i) {
5+
for (int v : target) {
6+
while (++cur < v) {
77
ans.add("Push");
8-
if (t == i) {
9-
cur = i + 1;
10-
break;
11-
}
128
ans.add("Pop");
139
}
10+
ans.add("Push");
1411
}
1512
return ans;
1613
}
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
class Solution:
22
def buildArray(self, target: List[int], n: int) -> List[str]:
3-
cur, ans = 1, []
4-
for t in target:
5-
for i in range(cur, n + 1):
6-
ans.append('Push')
7-
if t == i:
8-
cur = i + 1
9-
break
10-
ans.append('Pop')
3+
cur, ans = 0, []
4+
for v in target:
5+
cur += 1
6+
while cur < v:
7+
ans.extend(['Push', 'Pop'])
8+
cur += 1
9+
ans.append('Push')
1110
return ans

0 commit comments

Comments
 (0)