Skip to content

Commit e481ad1

Browse files
committed
feat: add solutions to lc problem: No.1472
No.1472.Design Browser History
1 parent dc30052 commit e481ad1

File tree

9 files changed

+316
-237
lines changed

9 files changed

+316
-237
lines changed

solution/1400-1499/1470.Shuffle the Array/README.md

+7
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,13 @@ class Solution:
6161
return ans
6262
```
6363

64+
```python
65+
class Solution:
66+
def shuffle(self, nums: List[int], n: int) -> List[int]:
67+
nums[::2], nums[1::2] = nums[:n], nums[n:]
68+
return nums
69+
```
70+
6471
### **Java**
6572

6673
<!-- 这里可写当前语言的特殊实现逻辑 -->

solution/1400-1499/1470.Shuffle the Array/README_EN.md

+7-4
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,9 @@
4747
<p><strong>Constraints:</strong></p>
4848

4949
<ul>
50-
5150
<li><code>1 &lt;= n &lt;= 500</code></li>
52-
5351
<li><code>nums.length == 2n</code></li>
54-
5552
<li><code>1 &lt;= nums[i] &lt;= 10^3</code></li>
56-
5753
</ul>
5854

5955
## Solutions
@@ -72,6 +68,13 @@ class Solution:
7268
return ans
7369
```
7470

71+
```python
72+
class Solution:
73+
def shuffle(self, nums: List[int], n: int) -> List[int]:
74+
nums[::2], nums[1::2] = nums[:n], nums[n:]
75+
return nums
76+
```
77+
7578
### **Java**
7679

7780
```java

solution/1400-1499/1471.The k Strongest Values in an Array/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@
7676

7777
**方法一:自定义排序**
7878

79-
时间复杂度 O(2nlogn)。
79+
时间复杂度 $O(2nlogn)$
8080

8181
<!-- tabs:start -->
8282

solution/1400-1499/1472.Design Browser History/README.md

+101-102
Original file line numberDiff line numberDiff line change
@@ -57,74 +57,39 @@ browserHistory.back(7); // 你原本在浏览 &quot;google.com
5757

5858
<!-- 这里可写通用的实现逻辑 -->
5959

60+
**方法一:栈**
61+
62+
使用两个栈模拟前进与后退操作。
63+
6064
<!-- tabs:start -->
6165

6266
### **Python3**
6367

6468
<!-- 这里可写当前语言的特殊实现逻辑 -->
6569

66-
列表实现。
67-
68-
```python
69-
class BrowserHistory:
70-
def __init__(self, homepage: str):
71-
self.urls = []
72-
self.cur = -1
73-
self.tail = -1
74-
self.visit(homepage)
75-
76-
def visit(self, url: str) -> None:
77-
self.cur += 1
78-
if self.cur < len(self.urls):
79-
self.urls[self.cur] = url
80-
else:
81-
self.urls.append(url)
82-
self.tail = self.cur
83-
84-
def back(self, steps: int) -> str:
85-
self.cur = max(0, self.cur - steps)
86-
return self.urls[self.cur]
87-
88-
def forward(self, steps: int) -> str:
89-
self.cur = min(self.tail, self.cur + steps)
90-
return self.urls[self.cur]
91-
92-
93-
# Your BrowserHistory object will be instantiated and called as such:
94-
# obj = BrowserHistory(homepage)
95-
# obj.visit(url)
96-
# param_2 = obj.back(steps)
97-
# param_3 = obj.forward(steps)
98-
```
99-
100-
栈实现。
101-
10270
```python
10371
class BrowserHistory:
10472

10573
def __init__(self, homepage: str):
106-
self.s1 = []
107-
self.s2 = []
108-
self.cur = homepage
74+
self.stk1 = []
75+
self.stk2 = []
76+
self.visit(homepage)
10977

11078
def visit(self, url: str) -> None:
111-
self.s2.clear()
112-
self.s1.append(self.cur)
113-
self.cur = url
79+
self.stk1.append(url)
80+
self.stk2.clear()
11481

11582
def back(self, steps: int) -> str:
116-
while steps > 0 and self.s1:
117-
self.s2.append(self.cur)
118-
self.cur = self.s1.pop()
83+
while steps and len(self.stk1) > 1:
84+
self.stk2.append(self.stk1.pop())
11985
steps -= 1
120-
return self.cur
86+
return self.stk1[-1]
12187

12288
def forward(self, steps: int) -> str:
123-
while steps > 0 and self.s2:
124-
self.s1.append(self.cur)
125-
self.cur = self.s2.pop()
89+
while steps and self.stk2:
90+
self.stk1.append(self.stk2.pop())
12691
steps -= 1
127-
return self.cur
92+
return self.stk1[-1]
12893

12994

13095
# Your BrowserHistory object will be instantiated and called as such:
@@ -138,37 +103,32 @@ class BrowserHistory:
138103

139104
<!-- 这里可写当前语言的特殊实现逻辑 -->
140105

141-
列表实现。
142-
143106
```java
144107
class BrowserHistory {
145-
private List<String> urls;
146-
private int cur = -1;
147-
private int tail = -1;
108+
private Deque<String> stk1 = new ArrayDeque<>();
109+
private Deque<String> stk2 = new ArrayDeque<>();
148110

149111
public BrowserHistory(String homepage) {
150-
urls = new ArrayList<>();
151112
visit(homepage);
152113
}
153-
114+
154115
public void visit(String url) {
155-
++cur;
156-
if (cur < urls.size()) {
157-
urls.set(cur, url);
158-
} else {
159-
urls.add(url);
160-
}
161-
tail = cur;
116+
stk1.push(url);
117+
stk2.clear();
162118
}
163-
119+
164120
public String back(int steps) {
165-
cur = Math.max(0, cur - steps);
166-
return urls.get(cur);
121+
for (; steps > 0 && stk1.size() > 1; --steps) {
122+
stk2.push(stk1.pop());
123+
}
124+
return stk1.peek();
167125
}
168-
126+
169127
public String forward(int steps) {
170-
cur = Math.min(tail, cur + steps);
171-
return urls.get(cur);
128+
for (; steps > 0 && !stk2.isEmpty(); --steps) {
129+
stk1.push(stk2.pop());
130+
}
131+
return stk1.peek();
172132
}
173133
}
174134

@@ -181,51 +141,90 @@ class BrowserHistory {
181141
*/
182142
```
183143

184-
栈实现。
144+
### **C++**
185145

186-
```java
146+
```cpp
187147
class BrowserHistory {
188-
private Deque<String> s1;
189-
private Deque<String> s2;
190-
private String cur;
148+
public:
149+
stack<string> stk1;
150+
stack<string> stk2;
191151

192-
public BrowserHistory(String homepage) {
193-
s1 = new ArrayDeque<>();
194-
s2 = new ArrayDeque<>();
195-
cur = homepage;
152+
BrowserHistory(string homepage) {
153+
visit(homepage);
196154
}
197-
198-
public void visit(String url) {
199-
s2.clear();
200-
s1.push(cur);
201-
cur = url;
155+
156+
void visit(string url) {
157+
stk1.push(url);
158+
stk2 = stack<string>();
202159
}
203-
204-
public String back(int steps) {
205-
while (steps > 0 && !s1.isEmpty()) {
206-
s2.push(cur);
207-
cur = s1.pop();
208-
--steps;
160+
161+
string back(int steps) {
162+
for (; steps && stk1.size() > 1; --steps) {
163+
stk2.push(stk1.top());
164+
stk1.pop();
209165
}
210-
return cur;
166+
return stk1.top();
211167
}
212-
213-
public String forward(int steps) {
214-
while (steps > 0 && !s2.isEmpty()) {
215-
s1.push(cur);
216-
cur = s2.pop();
217-
--steps;
168+
169+
string forward(int steps) {
170+
for (; steps && !stk2.empty(); --steps) {
171+
stk1.push(stk2.top());
172+
stk2.pop();
218173
}
219-
return cur;
174+
return stk1.top();
220175
}
176+
};
177+
178+
/**
179+
* Your BrowserHistory object will be instantiated and called as such:
180+
* BrowserHistory* obj = new BrowserHistory(homepage);
181+
* obj->visit(url);
182+
* string param_2 = obj->back(steps);
183+
* string param_3 = obj->forward(steps);
184+
*/
185+
```
186+
187+
### **Go**
188+
189+
```go
190+
type BrowserHistory struct {
191+
stk1 []string
192+
stk2 []string
193+
}
194+
195+
func Constructor(homepage string) BrowserHistory {
196+
t := BrowserHistory{[]string{}, []string{}}
197+
t.Visit(homepage)
198+
return t
199+
}
200+
201+
func (this *BrowserHistory) Visit(url string) {
202+
this.stk1 = append(this.stk1, url)
203+
this.stk2 = []string{}
204+
}
205+
206+
func (this *BrowserHistory) Back(steps int) string {
207+
for i := 0; i < steps && len(this.stk1) > 1; i++ {
208+
this.stk2 = append(this.stk2, this.stk1[len(this.stk1)-1])
209+
this.stk1 = this.stk1[:len(this.stk1)-1]
210+
}
211+
return this.stk1[len(this.stk1)-1]
212+
}
213+
214+
func (this *BrowserHistory) Forward(steps int) string {
215+
for i := 0; i < steps && len(this.stk2) > 0; i++ {
216+
this.stk1 = append(this.stk1, this.stk2[len(this.stk2)-1])
217+
this.stk2 = this.stk2[:len(this.stk2)-1]
218+
}
219+
return this.stk1[len(this.stk1)-1]
221220
}
222221
223222
/**
224223
* Your BrowserHistory object will be instantiated and called as such:
225-
* BrowserHistory obj = new BrowserHistory(homepage);
226-
* obj.visit(url);
227-
* String param_2 = obj.back(steps);
228-
* String param_3 = obj.forward(steps);
224+
* obj := Constructor(homepage);
225+
* obj.Visit(url);
226+
* param_2 := obj.Back(steps);
227+
* param_3 := obj.Forward(steps);
229228
*/
230229
```
231230

0 commit comments

Comments
 (0)