Skip to content

Commit ea7f7a5

Browse files
Merge branch 'youngyangyang04:master' into remote
2 parents 10357ec + 5ffd1de commit ea7f7a5

22 files changed

+1068
-100
lines changed

README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,16 @@
124124

125125
## 知识星球精选
126126

127+
* [秋招面试,心态很重要!](./problems/知识星球精选/秋招总结3.md)
128+
* [秋招倒霉透顶,触底反弹!](./problems/知识星球精选/秋招总结2.md)
129+
* [无竞赛,无实习,如何秋招?](./problems/知识星球精选/秋招总结1.md)
130+
* [offer总决赛,何去何从!](./problems/知识星球精选/offer总决赛,何去何从.md)
131+
* [入职后担心代码能力跟不上!](./problems/知识星球精选/入职后担心代码能力跟不上.md)
132+
* [秋招进入offer决赛圈!](./problems/知识星球精选/offer对比-决赛圈.md)
133+
* [非科班的困扰](./problems/知识星球精选/非科班的困扰.md)
134+
* [offer的选择-开奖](./problems/知识星球精选/秋招开奖.md)
135+
* [看到代码就抵触!怎么办?](./problems/知识星球精选/不喜欢写代码怎么办.md)
136+
* [遭遇逼签,怎么办?](./problems/知识星球精选/逼签.md)
127137
* [HR特意刁难非科班!](./problems/知识星球精选/HR特意刁难非科班.md)
128138
* [offer的选择](./problems/知识星球精选/offer的选择.md)
129139
* [天下乌鸦一般黑,哪家没有PUA?](./problems/知识星球精选/天下乌鸦一般黑.md)
@@ -567,4 +577,10 @@
567577
<a name="公众号"></a>
568578
<div align="center"><img src="https://code-thinking-1253855093.file.myqcloud.com/pics/20211026122841.png" data-img="1" width="650" height="500"></img></div>
569579

580+
# 服务器
570581

582+
<p align="center"><strong>阿里云服务器,双11特价活动🔥🔥🔥🔥</p>
583+
<p align="center">
584+
<a href="https://www.aliyun.com/minisite/goods?taskPkg=1111ydsrwb&pkgSid=1959&recordId=962642&userCode=roof0wob" target="_blank">
585+
<img src="./pics/阿里云.png" width="1000"/>
586+
</a>

problems/0121.买卖股票的最佳时机.md

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ public:
194194

195195
## 其他语言版本
196196

197-
Java
197+
Java:
198198

199199
> 贪心法:
200200

@@ -242,11 +242,12 @@ class Solution {
242242
class Solution {
243243
public int maxProfit(int[] prices) {
244244
int[] dp = new int[2];
245+
// 记录一次交易,一次交易有买入卖出两种状态
246+
// 0代表持有,1代表卖出
245247
dp[0] = -prices[0];
246248
dp[1] = 0;
247249
// 可以参考斐波那契问题的优化方式
248-
// dp[0] 和 dp[1], 其实是第 0 天的数据
249-
// 所以我们从 i=1 开始遍历数组,一共有 prices.length 天,
250+
// 我们从 i=1 开始遍历数组,一共有 prices.length 天,
250251
// 所以是 i<=prices.length
251252
for (int i = 1; i <= prices.length; i++) {
252253
// 前一天持有;或当天买入
@@ -263,7 +264,7 @@ class Solution {
263264
}
264265
```
265266
266-
Python
267+
Python:
267268
268269
> 贪心法:
269270
```python
@@ -307,7 +308,8 @@ class Solution:
307308
return dp[(length-1) % 2][1]
308309
```
309310

310-
Go:
311+
Go:
312+
311313
```Go
312314
func maxProfit(prices []int) int {
313315
length:=len(prices)
@@ -334,7 +336,7 @@ func max(a,b int)int {
334336
}
335337
```
336338

337-
JavaScript
339+
JavaScript:
338340

339341
> 动态规划
340342

problems/0122.买卖股票的最佳时机II.md

Lines changed: 8 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ public:
131131

132132
## 其他语言版本
133133

134-
### Java
134+
Java:
135135

136136
```java
137137
// 贪心思路
@@ -167,28 +167,8 @@ class Solution { // 动态规划
167167
}
168168
```
169169

170-
```java
171-
// 优化空间
172-
class Solution {
173-
public int maxProfit(int[] prices) {
174-
int[] dp=new int[2];
175-
// 0表示持有,1表示卖出
176-
dp[0]=-prices[0];
177-
dp[1]=0;
178-
for(int i=1; i<=prices.length; i++){
179-
// 前一天持有; 或当天卖出然后买入
180-
dp[0]=Math.max(dp[0], dp[1]-prices[i-1]);
181-
// 前一天卖出; 或当天卖出,当天卖出,得先持有
182-
dp[1]=Math.max(dp[1], dp[0]+prices[i-1]);
183-
}
184-
return dp[1];
185-
}
186-
}
187-
```
188-
189-
170+
Python:
190171

191-
### Python
192172
```python
193173
class Solution:
194174
def maxProfit(self, prices: List[int]) -> int:
@@ -212,7 +192,8 @@ class Solution:
212192
return dp[-1][1]
213193
```
214194

215-
### Go
195+
Go:
196+
216197
```golang
217198
//贪心算法
218199
func maxProfit(prices []int) int {
@@ -248,7 +229,8 @@ func maxProfit(prices []int) int {
248229
}
249230
```
250231

251-
### Javascript
232+
Javascript:
233+
252234
贪心
253235
```Javascript
254236
var maxProfit = function(prices) {
@@ -284,7 +266,8 @@ const maxProfit = (prices) => {
284266
};
285267
```
286268

287-
### C
269+
C:
270+
288271
```c
289272
int maxProfit(int* prices, int pricesSize){
290273
int result = 0;

problems/0122.买卖股票的最佳时机II(动态规划).md

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,25 +147,30 @@ class Solution
147147
}
148148
return dp[n - 1][0]; // 卖出股票收益高于持有股票收益,因此取[0]
149149
}
150+
}
151+
```
150152

151-
// 实现2:变量存储
152-
// 第一种方法需要用二维数组存储,有空间开销,其实关心的仅仅是前一天的状态,不关注更多的历史信息
153-
// 因此,可以仅保存前一天的信息存入 dp0、dp1 这 2 个变量即可
154-
// 时间复杂度:O(n),空间复杂度O(1)
153+
```java
154+
// 优化空间
155+
class Solution {
155156
public int maxProfit(int[] prices) {
156-
int n = prices.length;
157-
int dp0 = 0, dp1 = -prices[0]; // 定义变量,存储初始状态
158-
for (int i = 1; i < n; ++i) {
159-
int newDp0 = Math.max(dp0, dp1 + prices[i]); // 第 i 天,没有股票
160-
int newDp1 = Math.max(dp1, dp0 - prices[i]); // 第 i 天,持有股票
161-
dp0 = newDp0;
162-
dp1 = newDp1;
157+
int[] dp = new int[2];
158+
// 0表示持有,1表示卖出
159+
dp[0] = -prices[0];
160+
dp[1] = 0;
161+
for(int i = 1; i <= prices.length; i++){
162+
// 前一天持有; 既然不限制交易次数,那么再次买股票时,要加上之前的收益
163+
dp[0] = Math.max(dp[0], dp[1] - prices[i-1]);
164+
// 前一天卖出; 或当天卖出,当天卖出,得先持有
165+
dp[1] = Math.max(dp[1], dp[0] + prices[i-1]);
163166
}
164-
return dp0;
167+
return dp[1];
165168
}
166169
}
167170
```
168171

172+
173+
169174
Python:
170175

171176
> 版本一:

problems/0123.买卖股票的最佳时机III.md

Lines changed: 20 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ dp[1] = max(dp[1], dp[0] - prices[i]); 如果dp[1]取dp[1],即保持买入股
188188

189189
## 其他语言版本
190190

191-
### Java
191+
Java:
192192

193193
```java
194194
// 版本一
@@ -221,30 +221,30 @@ class Solution {
221221
// 版本二: 空间优化
222222
class Solution {
223223
public int maxProfit(int[] prices) {
224-
int[] dp=new int[4];
225-
// 存储两天的状态就行了
226-
// dp[0]代表第一次买入
227-
dp[0]=-prices[0];
228-
// dp[1]代表第一次卖出
229-
dp[1]=0;
230-
// dp[2]代表第二次买入
231-
dp[2]=-prices[0];
232-
// dp[3]代表第二次卖出
233-
dp[3]=0;
234-
for(int i=1; i<=prices.length; i++){
224+
int[] dp = new int[4];
225+
// 存储两次交易的状态就行了
226+
// dp[0]代表第一次交易的买入
227+
dp[0] = -prices[0];
228+
// dp[1]代表第一次交易的卖出
229+
dp[1] = 0;
230+
// dp[2]代表第二次交易的买入
231+
dp[2] = -prices[0];
232+
// dp[3]代表第二次交易的卖出
233+
dp[3] = 0;
234+
for(int i = 1; i <= prices.length; i++){
235235
// 要么保持不变,要么没有就买,有了就卖
236-
dp[0]=Math.max(dp[0], -prices[i-1]);
237-
dp[1]=Math.max(dp[1], dp[0]+prices[i-1]);
238-
// 这已经是第二天了,所以得加上前一天卖出去的价格
239-
dp[2]=Math.max(dp[2], dp[1]-prices[i-1]);
240-
dp[3]=Math.max(dp[3], dp[2]+prices[i-1]);
236+
dp[0] = Math.max(dp[0], -prices[i-1]);
237+
dp[1] = Math.max(dp[1], dp[0]+prices[i-1]);
238+
// 这已经是第二次交易了,所以得加上前一次交易卖出去的收获
239+
dp[2] = Math.max(dp[2], dp[1]-prices[i-1]);
240+
dp[3] = Math.max(dp[3], dp[2]+ prices[i-1]);
241241
}
242242
return dp[3];
243243
}
244244
}
245245
```
246246

247-
### Python
247+
Python:
248248

249249
> 版本一:
250250
```python
@@ -311,9 +311,7 @@ func max(a,b int)int{
311311
}
312312
```
313313

314-
315-
316-
### JavaScript
314+
JavaScript:
317315

318316
> 版本一:
319317

@@ -352,7 +350,7 @@ const maxProfit = prices => {
352350
};
353351
```
354352

355-
### Go
353+
Go:
356354

357355
> 版本一:
358356
```go

problems/0188.买卖股票的最佳时机IV.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,7 @@ public:
165165

166166
## 其他语言版本
167167

168-
Java
168+
Java:
169169

170170
```java
171171
// 版本一: 三维 dp数组
@@ -228,9 +228,9 @@ class Solution {
228228
if(k == 0){
229229
return 0;
230230
}
231-
// 其实就是123题的扩展,123题只用记录2天的状态
232-
// 这里记录k天的状态就行了
233-
// 每天都有买入,卖出两个状态,所以要乘 2
231+
// 其实就是123题的扩展,123题只用记录2次交易的状态
232+
// 这里记录k次交易的状态就行了
233+
// 每次交易都有买入,卖出两个状态,所以要乘 2
234234
int[] dp = new int[2 * k];
235235
// 按123题解题格式那样,做一个初始化
236236
for(int i = 0; i < dp.length / 2; i++){
@@ -246,15 +246,16 @@ class Solution {
246246
dp[j + 1] = Math.max(dp[j + 1], dp[j] + prices[i - 1]);
247247
}
248248
}
249-
// 返回最后一天卖出状态的结果就行了
249+
// 返回最后一次交易卖出状态的结果就行了
250250
return dp[dp.length - 1];
251251
}
252252
}
253253
```
254254

255+
Python:
255256

256-
Python:
257257
版本一
258+
258259
```python
259260
class Solution:
260261
def maxProfit(self, k: int, prices: List[int]) -> int:
@@ -285,8 +286,10 @@ class Solution:
285286
dp[j] = max(dp[j],dp[j-1]+prices[i])
286287
return dp[2*k]
287288
```
288-
Go:
289+
Go:
290+
289291
版本一:
292+
290293
```go
291294
// 买卖股票的最佳时机IV 动态规划
292295
// 时间复杂度O(kn) 空间复杂度O(kn)
@@ -356,10 +359,7 @@ func max(a,b int)int{
356359
}
357360
```
358361

359-
360-
361-
362-
Javascript:
362+
Javascript:
363363

364364
```javascript
365365
// 方法一:动态规划

0 commit comments

Comments
 (0)