From 63ad545c64202b21dfbdb6f6d149799ea0b0c27f Mon Sep 17 00:00:00 2001 From: qiuxuewei Date: Wed, 24 Nov 2021 15:33:59 +0800 Subject: [PATCH 01/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20232.=E7=94=A8?= =?UTF-8?q?=E6=A0=88=E5=AE=9E=E7=8E=B0=E9=98=9F=E5=88=97=20Swift=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0232.用栈实现队列.md | 37 +++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/problems/0232.用栈实现队列.md b/problems/0232.用栈实现队列.md index 0e4a5d6d..6e247d1d 100644 --- a/problems/0232.用栈实现队列.md +++ b/problems/0232.用栈实现队列.md @@ -349,6 +349,43 @@ MyQueue.prototype.empty = function() { }; ``` +Swift: +```swift +class MyQueue { + + var stackIn = [Int]() + var stackOut = [Int]() + + init() {} + + /** Push element x to the back of queue. */ + func push(_ x: Int) { + stackIn.append(x) + } + + /** Removes the element from in front of queue and returns that element. */ + func pop() -> Int { + if stackOut.isEmpty { + while !stackIn.isEmpty { + stackOut.append(stackIn.popLast()!) + } + } + return stackOut.popLast() ?? -1 + } + + /** Get the front element. */ + func peek() -> Int { + let res = pop() + stackOut.append(res) + return res + } + + /** Returns whether the queue is empty. */ + func empty() -> Bool { + return stackIn.isEmpty && stackOut.isEmpty + } +} +``` -----------------------
From 30886018c4fc1174914a7db707c15879fc9c6392 Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 16:12:39 +0800 Subject: [PATCH 02/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86309=E5=92=8C71?= =?UTF-8?q?4=E8=82=A1=E7=A5=A8=E9=97=AE=E9=A2=98=E4=B8=80=E7=BB=B4?= =?UTF-8?q?=E6=95=B0=E7=BB=84=E4=BC=98=E5=8C=96=E7=A9=BA=E9=97=B4=E7=9A=84?= =?UTF-8?q?java=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...09.最佳买卖股票时机含冷冻期.md | 23 +++++++++++++++++++ ...买卖股票的最佳时机含手续费.md | 18 +++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/problems/0309.最佳买卖股票时机含冷冻期.md b/problems/0309.最佳买卖股票时机含冷冻期.md index 8520e655..8c6ab288 100644 --- a/problems/0309.最佳买卖股票时机含冷冻期.md +++ b/problems/0309.最佳买卖股票时机含冷冻期.md @@ -185,6 +185,29 @@ class Solution { } ``` +```java +// 一维数组优化 +class Solution { + public int maxProfit(int[] prices) { + // dp[2]和dp[3]用来存储冷冻期的数据 + int[] dp=new int[4]; + // 0表示持有,1表示卖出 + dp[0] = -prices[0]; + dp[1] = 0; + for(int i = 1; i <= prices.length; i++){ + // 使用临时变量来保存dp[0], dp[2] + // 因为马上dp[0]和dp[2]的数据都会变 + int temp = dp[0]; + int temp1 = dp[2]; + dp[0] = Math.max(dp[0], Math.max(dp[3], dp[1]) - prices[i-1]); + dp[1] = Math.max(dp[1], dp[3]); + dp[2] = temp + prices[i-1]; + dp[3] = temp1; + } + return Math.max(dp[3],Math.max(dp[1],dp[2])); + } +} +``` Python: diff --git a/problems/0714.买卖股票的最佳时机含手续费.md b/problems/0714.买卖股票的最佳时机含手续费.md index afa2e2f6..964d5ea9 100644 --- a/problems/0714.买卖股票的最佳时机含手续费.md +++ b/problems/0714.买卖股票的最佳时机含手续费.md @@ -195,8 +195,26 @@ class Solution { // 动态规划 } ``` +```java +// 一维数组优化 +class Solution { + public int maxProfit(int[] prices, int fee) { + int[] dp = new int[2]; + dp[0] = -prices[0]; + dp[1] = 0; + for (int i = 1; i <= prices.length; i++) { + dp[0] = Math.max(dp[0], dp[1] - prices[i - 1]); + dp[1] = Math.max(dp[1], dp[0] + prices[i - 1] - fee); + } + return dp[1]; + } +} +``` + + Python: + ```python class Solution: # 贪心思路 def maxProfit(self, prices: List[int], fee: int) -> int: From 95a8752dd5d3c522b16b237a37df09e03379b35e Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 16:19:34 +0800 Subject: [PATCH 03/16] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BA=86121=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E7=BB=B4=E6=95=B0=E7=BB=84=E4=BC=98=E5=8C=96=E7=A9=BA?= =?UTF-8?q?=E9=97=B4=E7=9A=84java=E4=BB=A3=E7=A0=81=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0121.买卖股票的最佳时机.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/problems/0121.买卖股票的最佳时机.md b/problems/0121.买卖股票的最佳时机.md index 45b61666..2815cd47 100644 --- a/problems/0121.买卖股票的最佳时机.md +++ b/problems/0121.买卖股票的最佳时机.md @@ -194,7 +194,7 @@ public: ## 其他语言版本 -Java: +### Java > 贪心法: @@ -242,11 +242,12 @@ class Solution { class Solution { public int maxProfit(int[] prices) { int[] dp = new int[2]; + // 记录一次交易,一次交易有买入卖出两种状态 + // 0代表持有,1代表卖出 dp[0] = -prices[0]; dp[1] = 0; // 可以参考斐波那契问题的优化方式 - // dp[0] 和 dp[1], 其实是第 0 天的数据 - // 所以我们从 i=1 开始遍历数组,一共有 prices.length 天, + // 我们从 i=1 开始遍历数组,一共有 prices.length 天, // 所以是 i<=prices.length for (int i = 1; i <= prices.length; i++) { // 前一天持有;或当天买入 @@ -263,7 +264,7 @@ class Solution { } ``` -Python: +### Python > 贪心法: ```python @@ -307,7 +308,8 @@ class Solution: return dp[(length-1) % 2][1] ``` -Go: +### Go + ```Go func maxProfit(prices []int) int { length:=len(prices) @@ -334,7 +336,7 @@ func max(a,b int)int { } ``` -JavaScript: +### JavaScript > 动态规划 From aa5498df7882df5cd42eedb34f96df9c662b0eb2 Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 16:22:07 +0800 Subject: [PATCH 04/16] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BA=86122?= =?UTF-8?q?=E7=9A=84=E4=B8=80=E7=BB=B4=E6=95=B0=E7=BB=84java=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=EF=BC=8C=E5=85=B6=E5=AE=9E=E5=B0=B1=E6=98=AF=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E7=A9=BA=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0122.买卖股票的最佳时机II.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/problems/0122.买卖股票的最佳时机II.md b/problems/0122.买卖股票的最佳时机II.md index 5b117563..e2464a03 100644 --- a/problems/0122.买卖股票的最佳时机II.md +++ b/problems/0122.买卖股票的最佳时机II.md @@ -171,15 +171,15 @@ class Solution { // 动态规划 // 优化空间 class Solution { public int maxProfit(int[] prices) { - int[] dp=new int[2]; + int[] dp = new int[2]; // 0表示持有,1表示卖出 - dp[0]=-prices[0]; - dp[1]=0; - for(int i=1; i<=prices.length; i++){ + dp[0] = -prices[0]; + dp[1] = 0; + for(int i = 1; i <= prices.length; i++){ // 前一天持有; 或当天卖出然后买入 - dp[0]=Math.max(dp[0], dp[1]-prices[i-1]); + dp[0] = Math.max(dp[0], dp[1] - prices[i-1]); // 前一天卖出; 或当天卖出,当天卖出,得先持有 - dp[1]=Math.max(dp[1], dp[0]+prices[i-1]); + dp[1] = Math.max(dp[1], dp[0] + prices[i-1]); } return dp[1]; } From 6bc248031953b214a2d08fc5180938048a099940 Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 16:26:02 +0800 Subject: [PATCH 05/16] =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E5=8C=96=E4=BA=86123?= =?UTF-8?q?=E4=B8=80=E7=BB=B4=E6=95=B0=E7=BB=84=E7=A9=BA=E9=97=B4=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=9A=84java=E4=BB=A3=E7=A0=81=EF=BC=8C=E5=B9=B6?= =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E4=BA=86=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0123.买卖股票的最佳时机III.md | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/problems/0123.买卖股票的最佳时机III.md b/problems/0123.买卖股票的最佳时机III.md index db3f0278..3d67ec87 100644 --- a/problems/0123.买卖股票的最佳时机III.md +++ b/problems/0123.买卖股票的最佳时机III.md @@ -221,23 +221,23 @@ class Solution { // 版本二: 空间优化 class Solution { public int maxProfit(int[] prices) { - int[] dp=new int[4]; - // 存储两天的状态就行了 - // dp[0]代表第一次买入 - dp[0]=-prices[0]; - // dp[1]代表第一次卖出 - dp[1]=0; - // dp[2]代表第二次买入 - dp[2]=-prices[0]; - // dp[3]代表第二次卖出 - dp[3]=0; - for(int i=1; i<=prices.length; i++){ + int[] dp = new int[4]; + // 存储两次交易的状态就行了 + // dp[0]代表第一次交易的买入 + dp[0] = -prices[0]; + // dp[1]代表第一次交易的卖出 + dp[1] = 0; + // dp[2]代表第二次交易的买入 + dp[2] = -prices[0]; + // dp[3]代表第二次交易的卖出 + dp[3] = 0; + for(int i = 1; i <= prices.length; i++){ // 要么保持不变,要么没有就买,有了就卖 - dp[0]=Math.max(dp[0], -prices[i-1]); - dp[1]=Math.max(dp[1], dp[0]+prices[i-1]); - // 这已经是第二天了,所以得加上前一天卖出去的价格 - dp[2]=Math.max(dp[2], dp[1]-prices[i-1]); - dp[3]=Math.max(dp[3], dp[2]+prices[i-1]); + dp[0] = Math.max(dp[0], -prices[i-1]); + dp[1] = Math.max(dp[1], dp[0]+prices[i-1]); + // 这已经是第二次交易了,所以得加上前一次交易卖出去的收获 + dp[2] = Math.max(dp[2], dp[1]-prices[i-1]); + dp[3] = Math.max(dp[3], dp[2]+ prices[i-1]); } return dp[3]; } From 7575cfd43163d35096512c4ff75b40b578ff4f3a Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 16:28:54 +0800 Subject: [PATCH 06/16] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E4=BA=86188=E8=82=A1?= =?UTF-8?q?=E7=A5=A8=E9=97=AE=E9=A2=98=E4=B8=80=E7=BB=B4=E6=95=B0=E7=BB=84?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E4=BC=98=E5=8C=96=E7=9A=84java=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0188.买卖股票的最佳时机IV.md | 22 +++++++++---------- 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/problems/0188.买卖股票的最佳时机IV.md b/problems/0188.买卖股票的最佳时机IV.md index 0e898b43..537ccd4a 100644 --- a/problems/0188.买卖股票的最佳时机IV.md +++ b/problems/0188.买卖股票的最佳时机IV.md @@ -165,7 +165,7 @@ public: ## 其他语言版本 -Java: +### Java ```java // 版本一: 三维 dp数组 @@ -228,9 +228,9 @@ class Solution { if(k == 0){ return 0; } - // 其实就是123题的扩展,123题只用记录2天的状态 - // 这里记录k天的状态就行了 - // 每天都有买入,卖出两个状态,所以要乘 2 + // 其实就是123题的扩展,123题只用记录2次交易的状态 + // 这里记录k次交易的状态就行了 + // 每次交易都有买入,卖出两个状态,所以要乘 2 int[] dp = new int[2 * k]; // 按123题解题格式那样,做一个初始化 for(int i = 0; i < dp.length / 2; i++){ @@ -246,15 +246,15 @@ class Solution { dp[j + 1] = Math.max(dp[j + 1], dp[j] + prices[i - 1]); } } - // 返回最后一天卖出状态的结果就行了 + // 返回最后一次交易卖出状态的结果就行了 return dp[dp.length - 1]; } } ``` - -Python: +### Python 版本一 + ```python class Solution: def maxProfit(self, k: int, prices: List[int]) -> int: @@ -285,8 +285,9 @@ class Solution: dp[j] = max(dp[j],dp[j-1]+prices[i]) return dp[2*k] ``` -Go: +### Go 版本一: + ```go // 买卖股票的最佳时机IV 动态规划 // 时间复杂度O(kn) 空间复杂度O(kn) @@ -356,10 +357,7 @@ func max(a,b int)int{ } ``` - - - -Javascript: +### Javascript ```javascript // 方法一:动态规划 From 2517bb603948d44767f629fed00a459663723d4c Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 21:54:22 +0800 Subject: [PATCH 07/16] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E4=BA=86121=E3=80=8112?= =?UTF-8?q?2=E3=80=81123=E3=80=81188md=E6=A0=BC=E5=BC=8F=E9=94=99=E8=AF=AF?= =?UTF-8?q?=EF=BC=8C=E5=A5=BD=E5=BF=83=E5=B9=B2=E4=BA=86=E5=9D=8F=E4=BA=8B?= =?UTF-8?q?=EF=BC=8C=E6=8A=8A=E5=8D=A1=E5=93=A5=E6=A0=BC=E5=BC=8F=E6=94=B9?= =?UTF-8?q?=E4=BA=86=EF=BC=8C=E5=90=93=E6=AD=BB=EF=BC=8C=E8=B5=B6=E7=B4=A7?= =?UTF-8?q?=E6=94=B9=E8=BF=87=E6=9D=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0121.买卖股票的最佳时机.md | 8 ++++---- problems/0122.买卖股票的最佳时机II.md | 14 ++++++++------ problems/0123.买卖股票的最佳时机III.md | 10 ++++------ problems/0188.买卖股票的最佳时机IV.md | 10 ++++++---- 4 files changed, 22 insertions(+), 20 deletions(-) diff --git a/problems/0121.买卖股票的最佳时机.md b/problems/0121.买卖股票的最佳时机.md index 2815cd47..486e08bd 100644 --- a/problems/0121.买卖股票的最佳时机.md +++ b/problems/0121.买卖股票的最佳时机.md @@ -194,7 +194,7 @@ public: ## 其他语言版本 -### Java +Java: > 贪心法: @@ -264,7 +264,7 @@ class Solution { } ``` -### Python +Python: > 贪心法: ```python @@ -308,7 +308,7 @@ class Solution: return dp[(length-1) % 2][1] ``` -### Go +Go: ```Go func maxProfit(prices []int) int { @@ -336,7 +336,7 @@ func max(a,b int)int { } ``` -### JavaScript +JavaScript: > 动态规划 diff --git a/problems/0122.买卖股票的最佳时机II.md b/problems/0122.买卖股票的最佳时机II.md index e2464a03..1259aff7 100644 --- a/problems/0122.买卖股票的最佳时机II.md +++ b/problems/0122.买卖股票的最佳时机II.md @@ -131,7 +131,7 @@ public: ## 其他语言版本 -### Java +Java: ```java // 贪心思路 @@ -186,9 +186,8 @@ class Solution { } ``` +Python: - -### Python ```python class Solution: def maxProfit(self, prices: List[int]) -> int: @@ -212,7 +211,8 @@ class Solution: return dp[-1][1] ``` -### Go +Go: + ```golang //贪心算法 func maxProfit(prices []int) int { @@ -248,7 +248,8 @@ func maxProfit(prices []int) int { } ``` -### Javascript +Javascript: + 贪心 ```Javascript var maxProfit = function(prices) { @@ -284,7 +285,8 @@ const maxProfit = (prices) => { }; ``` -### C +C: + ```c int maxProfit(int* prices, int pricesSize){ int result = 0; diff --git a/problems/0123.买卖股票的最佳时机III.md b/problems/0123.买卖股票的最佳时机III.md index 3d67ec87..8fa3a8e0 100644 --- a/problems/0123.买卖股票的最佳时机III.md +++ b/problems/0123.买卖股票的最佳时机III.md @@ -188,7 +188,7 @@ dp[1] = max(dp[1], dp[0] - prices[i]); 如果dp[1]取dp[1],即保持买入股 ## 其他语言版本 -### Java +Java: ```java // 版本一 @@ -244,7 +244,7 @@ class Solution { } ``` -### Python +Python: > 版本一: ```python @@ -311,9 +311,7 @@ func max(a,b int)int{ } ``` - - -### JavaScript +JavaScript: > 版本一: @@ -352,7 +350,7 @@ const maxProfit = prices => { }; ``` -### Go +Go: > 版本一: ```go diff --git a/problems/0188.买卖股票的最佳时机IV.md b/problems/0188.买卖股票的最佳时机IV.md index 537ccd4a..615ebd5c 100644 --- a/problems/0188.买卖股票的最佳时机IV.md +++ b/problems/0188.买卖股票的最佳时机IV.md @@ -165,7 +165,7 @@ public: ## 其他语言版本 -### Java +Java: ```java // 版本一: 三维 dp数组 @@ -252,7 +252,8 @@ class Solution { } ``` -### Python +Python: + 版本一 ```python @@ -285,7 +286,8 @@ class Solution: dp[j] = max(dp[j],dp[j-1]+prices[i]) return dp[2*k] ``` -### Go +Go: + 版本一: ```go @@ -357,7 +359,7 @@ func max(a,b int)int{ } ``` -### Javascript +Javascript: ```javascript // 方法一:动态规划 From 09a19372ba0e805e0a5a776bd64434f26f3f72af Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Wed, 24 Nov 2021 22:11:33 +0800 Subject: [PATCH 08/16] =?UTF-8?q?=E4=B8=8D=E5=B0=8F=E5=BF=83=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=88=B0714=EF=BC=88=E8=B4=AA=E5=BF=83=EF=BC=89?= =?UTF-8?q?=E5=93=AA=E9=87=8C=E5=8E=BB=E4=BA=86=EF=BC=8C=E7=8E=B0=E5=9C=A8?= =?UTF-8?q?=E6=8A=8A=E4=B8=80=E7=BB=B4=E6=95=B0=E7=BB=84=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=A9=BA=E9=97=B4=E7=9A=84=E4=BB=A3=E7=A0=81=E9=87=8D=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=BF=9B=E4=BA=86=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=92?= =?UTF-8?q?=E9=A2=98=E8=A7=A3=E4=B8=AD=EF=BC=8C=E5=B7=B2=E6=9B=B4=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...14.买卖股票的最佳时机含手续费.md | 16 ---------------- ...最佳时机含手续费(动态规划).md | 14 ++++++++++++++ 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/problems/0714.买卖股票的最佳时机含手续费.md b/problems/0714.买卖股票的最佳时机含手续费.md index 964d5ea9..f7ddeaf7 100644 --- a/problems/0714.买卖股票的最佳时机含手续费.md +++ b/problems/0714.买卖股票的最佳时机含手续费.md @@ -195,22 +195,6 @@ class Solution { // 动态规划 } ``` -```java -// 一维数组优化 -class Solution { - public int maxProfit(int[] prices, int fee) { - int[] dp = new int[2]; - dp[0] = -prices[0]; - dp[1] = 0; - for (int i = 1; i <= prices.length; i++) { - dp[0] = Math.max(dp[0], dp[1] - prices[i - 1]); - dp[1] = Math.max(dp[1], dp[0] + prices[i - 1] - fee); - } - return dp[1]; - } -} -``` - Python: diff --git a/problems/0714.买卖股票的最佳时机含手续费(动态规划).md b/problems/0714.买卖股票的最佳时机含手续费(动态规划).md index 2b3416d4..700b8cde 100644 --- a/problems/0714.买卖股票的最佳时机含手续费(动态规划).md +++ b/problems/0714.买卖股票的最佳时机含手续费(动态规划).md @@ -134,6 +134,20 @@ public int maxProfit(int[] prices, int fee) { } return Math.max(dp[len - 1][0], dp[len - 1][1]); } + +// 一维数组优化 +class Solution { + public int maxProfit(int[] prices, int fee) { + int[] dp = new int[2]; + dp[0] = -prices[0]; + dp[1] = 0; + for (int i = 1; i <= prices.length; i++) { + dp[0] = Math.max(dp[0], dp[1] - prices[i - 1]); + dp[1] = Math.max(dp[1], dp[0] + prices[i - 1] - fee); + } + return dp[1]; + } +} ``` Python: From 50a12ff215f7859b512e9f4fc7154196be0f56da Mon Sep 17 00:00:00 2001 From: qiuxuewei Date: Thu, 25 Nov 2021 16:24:01 +0800 Subject: [PATCH 09/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20225.=20=E7=94=A8?= =?UTF-8?q?=E9=98=9F=E5=88=97=E5=AE=9E=E7=8E=B0=E6=A0=88=20Swift=E7=89=88?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0225.用队列实现栈.md | 119 ++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) diff --git a/problems/0225.用队列实现栈.md b/problems/0225.用队列实现栈.md index edb88f36..be9f1f79 100644 --- a/problems/0225.用队列实现栈.md +++ b/problems/0225.用队列实现栈.md @@ -598,5 +598,124 @@ MyStack.prototype.empty = function() { ``` +Swift +```Swift +// 定义一个队列数据结构 +class Queue { + var array: [Int] + init() { + array = [Int]() + } + + /** Push element x to the back of queue. */ + func push(_ x: Int) { + array.append(x) + } + + /** Removes the element from in front of queue and returns that element. */ + func pop() -> Int { + if array.isEmpty { + return -1 + } + return array.removeFirst() + } + + /** Get the front element. */ + func peek() -> Int { + if array.isEmpty { + return -1 + } + return array.first! + } + + /** Returns whether the queue is empty. */ + func empty() -> Bool { + return array.isEmpty + } + + func count() -> Int { + return array.count + } +} + +// 使用双队列 +class MyStack { + var queue1: Queue + var queue2: Queue + + init() { + queue1 = Queue() + queue2 = Queue() + } + + func push(_ x: Int) { + queue1.push(x) + } + + func pop() -> Int { + if queue1.empty() { + return -1 + } + while queue1.count() > 1 { + queue2.push(queue1.pop()) + } + let res = queue1.pop() + while !queue2.empty() { + queue1.push(queue2.pop()) + } + return res + } + + func top() -> Int { + if queue1.empty() { + return -1 + } + let res = pop() + push(res) + return res + } + + func empty() -> Bool { + return queue1.empty() && queue2.empty() + } +} + +// 使用单队列 +class MyStack { + var queue: Queue + + init() { + queue = Queue() + } + + func push(_ x: Int) { + queue.push(x) + } + + func pop() -> Int { + if queue.empty() { + return -1 + } + for _ in 1 ..< queue.count() { + queue.push(queue.pop()) + } + return queue.pop() + } + + func top() -> Int { + if queue.empty() { + return -1 + } + let res = pop() + push(res) + return res + } + + func empty() -> Bool { + return queue.empty() + } +} +``` + -----------------------
From b18f227ffb572c08db29f54f66bbc149b5a68d11 Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Thu, 25 Nov 2021 21:26:43 +0800 Subject: [PATCH 10/16] =?UTF-8?q?=E5=B0=86=E8=AF=AF=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=88=B0122=E8=B4=AA=E5=BF=83=E7=9A=84java=E7=A9=BA=E9=97=B4?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E5=8A=A0=E5=88=B0=E4=BA=86?= =?UTF-8?q?122=E5=8A=A8=E6=80=81=E8=A7=84=E5=88=92=E5=A4=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0122.买卖股票的最佳时机II.md | 19 ------------ ...票的最佳时机II(动态规划).md | 29 +++++++++++-------- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/problems/0122.买卖股票的最佳时机II.md b/problems/0122.买卖股票的最佳时机II.md index 1259aff7..f6d5906a 100644 --- a/problems/0122.买卖股票的最佳时机II.md +++ b/problems/0122.买卖股票的最佳时机II.md @@ -167,25 +167,6 @@ class Solution { // 动态规划 } ``` -```java -// 优化空间 -class Solution { - public int maxProfit(int[] prices) { - int[] dp = new int[2]; - // 0表示持有,1表示卖出 - dp[0] = -prices[0]; - dp[1] = 0; - for(int i = 1; i <= prices.length; i++){ - // 前一天持有; 或当天卖出然后买入 - dp[0] = Math.max(dp[0], dp[1] - prices[i-1]); - // 前一天卖出; 或当天卖出,当天卖出,得先持有 - dp[1] = Math.max(dp[1], dp[0] + prices[i-1]); - } - return dp[1]; - } -} -``` - Python: ```python diff --git a/problems/0122.买卖股票的最佳时机II(动态规划).md b/problems/0122.买卖股票的最佳时机II(动态规划).md index e701a821..8f03e88e 100644 --- a/problems/0122.买卖股票的最佳时机II(动态规划).md +++ b/problems/0122.买卖股票的最佳时机II(动态规划).md @@ -147,25 +147,30 @@ class Solution } return dp[n - 1][0]; // 卖出股票收益高于持有股票收益,因此取[0] } +} +``` - // 实现2:变量存储 - // 第一种方法需要用二维数组存储,有空间开销,其实关心的仅仅是前一天的状态,不关注更多的历史信息 - // 因此,可以仅保存前一天的信息存入 dp0、dp1 这 2 个变量即可 - // 时间复杂度:O(n),空间复杂度O(1) +```java +// 优化空间 +class Solution { public int maxProfit(int[] prices) { - int n = prices.length; - int dp0 = 0, dp1 = -prices[0]; // 定义变量,存储初始状态 - for (int i = 1; i < n; ++i) { - int newDp0 = Math.max(dp0, dp1 + prices[i]); // 第 i 天,没有股票 - int newDp1 = Math.max(dp1, dp0 - prices[i]); // 第 i 天,持有股票 - dp0 = newDp0; - dp1 = newDp1; + int[] dp = new int[2]; + // 0表示持有,1表示卖出 + dp[0] = -prices[0]; + dp[1] = 0; + for(int i = 1; i <= prices.length; i++){ + // 前一天持有; 既然不限制交易次数,那么再次买股票时,要加上之前的收益 + dp[0] = Math.max(dp[0], dp[1] - prices[i-1]); + // 前一天卖出; 或当天卖出,当天卖出,得先持有 + dp[1] = Math.max(dp[1], dp[0] + prices[i-1]); } - return dp0; + return dp[1]; } } ``` + + Python: > 版本一: From 1f33812b15367fc21c9498d77f286d4633d3a137 Mon Sep 17 00:00:00 2001 From: LiHua <1985390347@qq.com> Date: Thu, 25 Nov 2021 21:31:13 +0800 Subject: [PATCH 11/16] =?UTF-8?q?=E5=88=A0=E5=87=8F=E4=BA=86309=E4=B8=80?= =?UTF-8?q?=E7=BB=B4=E6=95=B0=E7=BB=84=E7=A9=BA=E9=97=B4=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E7=9A=84=E9=83=A8=E5=88=86=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0309.最佳买卖股票时机含冷冻期.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/problems/0309.最佳买卖股票时机含冷冻期.md b/problems/0309.最佳买卖股票时机含冷冻期.md index 8c6ab288..48106bd8 100644 --- a/problems/0309.最佳买卖股票时机含冷冻期.md +++ b/problems/0309.最佳买卖股票时机含冷冻期.md @@ -189,9 +189,8 @@ class Solution { // 一维数组优化 class Solution { public int maxProfit(int[] prices) { - // dp[2]和dp[3]用来存储冷冻期的数据 int[] dp=new int[4]; - // 0表示持有,1表示卖出 + dp[0] = -prices[0]; dp[1] = 0; for(int i = 1; i <= prices.length; i++){ From 486cb9f98511a40008ce4e5fac6fcc4314840e1f Mon Sep 17 00:00:00 2001 From: youngyangyang04 <826123027@qq.com> Date: Fri, 26 Nov 2021 11:40:48 +0800 Subject: [PATCH 12/16] Update --- README.md | 10 + problems/0406.根据身高重建队列.md | 46 ++--- .../offer对比-决赛圈.md | 87 ++++++++ .../offer总决赛,何去何从.md | 88 ++++++++ .../不喜欢写代码怎么办.md | 45 ++++ .../入职后担心代码能力跟不上.md | 55 +++++ problems/知识星球精选/秋招开奖.md | 65 ++++++ problems/知识星球精选/秋招总结1.md | 194 ++++++++++++++++++ problems/知识星球精选/秋招总结2.md | 48 +++++ problems/知识星球精选/秋招总结3.md | 83 ++++++++ problems/知识星球精选/逼签.md | 51 +++++ .../知识星球精选/非科班的困扰.md | 54 +++++ 12 files changed, 803 insertions(+), 23 deletions(-) create mode 100644 problems/知识星球精选/offer对比-决赛圈.md create mode 100644 problems/知识星球精选/offer总决赛,何去何从.md create mode 100644 problems/知识星球精选/不喜欢写代码怎么办.md create mode 100644 problems/知识星球精选/入职后担心代码能力跟不上.md create mode 100644 problems/知识星球精选/秋招开奖.md create mode 100644 problems/知识星球精选/秋招总结1.md create mode 100644 problems/知识星球精选/秋招总结2.md create mode 100644 problems/知识星球精选/秋招总结3.md create mode 100644 problems/知识星球精选/逼签.md create mode 100644 problems/知识星球精选/非科班的困扰.md diff --git a/README.md b/README.md index f12a00e8..0fd937f3 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,16 @@ ## 知识星球精选 +* [秋招面试,心态很重要!](./problems/知识星球精选/秋招总结3.md) +* [秋招倒霉透顶,触底反弹!](./problems/知识星球精选/秋招总结2.md) +* [无竞赛,无实习,如何秋招?](./problems/知识星球精选/秋招总结1.md) +* [offer总决赛,何去何从!](./problems/知识星球精选/offer总决赛,何去何从.md) +* [入职后担心代码能力跟不上!](./problems/知识星球精选/入职后担心代码能力跟不上.md) +* [秋招进入offer决赛圈!](./problems/知识星球精选/offer对比-决赛圈.md) +* [非科班的困扰](./problems/知识星球精选/非科班的困扰.md) +* [offer的选择-开奖](./problems/知识星球精选/秋招开奖.md) +* [看到代码就抵触!怎么办?](./problems/知识星球精选/不喜欢写代码怎么办.md) +* [遭遇逼签,怎么办?](./problems/知识星球精选/逼签.md) * [HR特意刁难非科班!](./problems/知识星球精选/HR特意刁难非科班.md) * [offer的选择](./problems/知识星球精选/offer的选择.md) * [天下乌鸦一般黑,哪家没有PUA?](./problems/知识星球精选/天下乌鸦一般黑.md) diff --git a/problems/0406.根据身高重建队列.md b/problems/0406.根据身高重建队列.md index 417fdf46..1d79209a 100644 --- a/problems/0406.根据身高重建队列.md +++ b/problems/0406.根据身高重建队列.md @@ -5,7 +5,7 @@

参与本项目,贡献其他语言版本的代码,拥抱开源,让更多学习算法的小伙伴们收益!

-## 406.根据身高重建队列 +# 406.根据身高重建队列 [力扣题目链接](https://leetcode-cn.com/problems/queue-reconstruction-by-height/) @@ -14,20 +14,20 @@ 请你重新构造并返回输入数组 people 所表示的队列。返回的队列应该格式化为数组 queue ,其中 queue[j] = [hj, kj] 是队列中第 j 个人的属性(queue[0] 是排在队列前面的人)。 示例 1: -输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] -输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] -解释: -编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。 -编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。 -编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。 -编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。 -编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。 -编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。 -因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。 +* 输入:people = [[7,0],[4,4],[7,1],[5,0],[6,1],[5,2]] +* 输出:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] +* 解释: + * 编号为 0 的人身高为 5 ,没有身高更高或者相同的人排在他前面。 + * 编号为 1 的人身高为 7 ,没有身高更高或者相同的人排在他前面。 + * 编号为 2 的人身高为 5 ,有 2 个身高更高或者相同的人排在他前面,即编号为 0 和 1 的人。 + * 编号为 3 的人身高为 6 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。 + * 编号为 4 的人身高为 4 ,有 4 个身高更高或者相同的人排在他前面,即编号为 0、1、2、3 的人。 + * 编号为 5 的人身高为 7 ,有 1 个身高更高或者相同的人排在他前面,即编号为 1 的人。 + * 因此 [[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 是重新构造后的队列。 示例 2: -输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]] -输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]] +* 输入:people = [[6,0],[5,0],[4,0],[3,2],[2,2],[1,4]] +* 输出:[[4,0],[5,0],[2,2],[3,2],[1,4],[6,0]] 提示: @@ -86,12 +86,12 @@ [[7,0], [7,1], [6,1], [5,0], [5,2],[4,4]] 插入的过程: -插入[7,0]:[[7,0]] -插入[7,1]:[[7,0],[7,1]] -插入[6,1]:[[7,0],[6,1],[7,1]] -插入[5,0]:[[5,0],[7,0],[6,1],[7,1]] -插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]] -插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] +* 插入[7,0]:[[7,0]] +* 插入[7,1]:[[7,0],[7,1]] +* 插入[6,1]:[[7,0],[6,1],[7,1]] +* 插入[5,0]:[[5,0],[7,0],[6,1],[7,1]] +* 插入[5,2]:[[5,0],[7,0],[5,2],[6,1],[7,1]] +* 插入[4,4]:[[5,0],[7,0],[5,2],[6,1],[4,4],[7,1]] 此时就按照题目的要求完成了重新排列。 @@ -182,7 +182,7 @@ public: ## 其他语言版本 -Java: +### Java ```java class Solution { public int[][] reconstructQueue(int[][] people) { @@ -203,7 +203,7 @@ class Solution { } ``` -Python: +### Python ```python class Solution: def reconstructQueue(self, people: List[List[int]]) -> List[List[int]]: @@ -219,7 +219,7 @@ class Solution: return que ``` -Go: +### Go ```go func reconstructQueue(people [][]int) [][]int { //先将身高从大到小排序,确定最大个子的相对位置 @@ -269,7 +269,7 @@ func reconstructQueue(people [][]int) [][]int { } ``` -Javascript: +### Javascript ```Javascript var reconstructQueue = function(people) { diff --git a/problems/知识星球精选/offer对比-决赛圈.md b/problems/知识星球精选/offer对比-决赛圈.md new file mode 100644 index 00000000..1f91730f --- /dev/null +++ b/problems/知识星球精选/offer对比-决赛圈.md @@ -0,0 +1,87 @@ +

+ + + + +# offer选择进入决赛圈.md + +秋招已经结束了,该开奖的差不多都陆续开奖了,很多录友的也进入了offer决赛圈。 + +我每天都在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里,回答十几个offer对比的问题,我也是结合自己过来人的经验给大家做做分析,我也选几个案例,在公众号上也给大家分享一下,希望对大家有所启发。 + +以下是知识星球里的部分问答: + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031113844.png) + +C++后端开发 总包40w,这个薪资和岗位很不错了,至于干的活杂不杂 都不是你能打听出来的,要进去,看具体工作,以及领导的具体安排,只有亲自去感受了,才知道是不是打杂。 + +深信服 云计算 大多数是做toB的业务,做私有云,几乎是和硬件设备一起卖,和阿里云,腾讯云,这些公有云厂商不是一个概念的。 + +深信服也不错,但不用奔着云计算这个壳子就去冲 深信服,进去干的活未必和云计算有多关系,而且去深信服 你就能保证不打杂了么? 对吧 + +所以 具体工作内容是 我们控制不了的,知道个大概方向就可以了。 + +去百度吧,挺好的。 + +------------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031105039.png) + +普渡科技 是是一家C轮创业公司,一般创业公司 双休的可能性不太大。而且 看两家给你的薪资,如果算上公积金的话,到手的钱没有百度开的高。 + +应届生去创业公司,有一点吃亏,就是你刚进去,因为你还不能干活,有明显的产出,或者能力有限,并不会给你 期权甚至股份,可能股份兑现不了,但表示的是对候选人的重视程度。 + +创业公司研发流程还不够规范,所谓的野蛮成长 就是没有流程。 **关键是能成长起来 万事大吉,就怕长不起来**。 + +百度虽然是测开的岗位,但薪资开得挺高了,可以看出对你的重视,飞桨深度学习平台部,也很不错,是百度重点打造的深度学习框架。 + +我倾向于选百度,虽然是测开,但进去依然可以学很多东西。 这样稳一些。 + +当然如果你想赌一把,可以去普渡科技,谁也说不好,万一后面起飞了呢。 + +---------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031111110.png) + +双非本,还是电子信息类专业,能拿到这些offer,真的很不容易了👍 + +如果喜欢搞硬件,嵌入式应用方向其实也挺宽的,需求面也很广,华为 中兴,还有一堆手机厂商 新能源车企,智能家居,涉及到物联网的行业,都需要嵌入式开发。 + +中新赛克 也是上市公司,其实和 海康威视 大华股份 都差不多,这几家给薪资都差不多,一样的薪资,你在南京可比在杭州舒服多了啊,而且你家也在南京。 + +如果要真的是去大厂学技术,或者工资特别高,背井离乡也是可以的,但 海康威视 大华股份 估计也没有达到这个程度,薪资也没高出来,甚至可能不如 中新赛克 ,你还有 中新赛克给你的签字费呢。 + +综上,我倾向于 去 中新赛克,在老家,这个薪资不挺舒服的么,南京也很不错。 好好干吧💪 + +------------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031110153.png) + +腾讯 这个部门有点边缘,技术栈比较浅。企业IT部就是做 企业内部应用的,最多也就是 几万人使用吧,大概率也没有机会磨练技术。系统很成熟,当然不加班。 + +百度推荐架构部,还是挺核心的,技术能力 还是比较强的。 **在上海应届生可以落户了,比深圳户口香太多太多了**。 + +至于晋升,百度晋升 一点也不慢,顺利的话,T3 到 T6 可以三年,一般情况是4年, T6跳 腾讯可以对应的是3-1 或者 3-2级别了。 + +至于光环,对个人来说,百度工程师在业内是很受认可的,一点不比腾讯差, 很多人说:拼多多啊,京东啊 市值都超过百度了,百度不是第一梯队了,等等。 + +说实话,**那公司的市值和我们这些码农有关系么**,对吧,**我们对关心的是 自己技术的成长,自己值多少钱,而不是公司值多少钱**。 + +至于薪资,相对于岗位,一年差6w,不算多,倾向于选百度。 + +------------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031105736.png) + +去字节吧, 云存储方向 这个方向值得深耕, 是一个技术驱动的方向,而且各大厂商 都搞分布式存储,就业机会挺多的,再说 字节给的薪资也不错。 + +如果以后想离家近,你可以跳槽 腾讯云 继续做分布式存储,薪资还能涨一波。 + +如果对技术有追求的话,整个技术生涯都是可以认准云存储方向。存储是刚需! + +你可别在准备春招了,这大厂offer 都不要,准备啥 春招啊,哈哈哈,别卷了,休息吧。 + +---------- + +以上就是我在知识星球,针对录友们offer决赛圈的解答,希望对大家也有所帮助。 + diff --git a/problems/知识星球精选/offer总决赛,何去何从.md b/problems/知识星球精选/offer总决赛,何去何从.md new file mode 100644 index 00000000..01745ae3 --- /dev/null +++ b/problems/知识星球精选/offer总决赛,何去何从.md @@ -0,0 +1,88 @@ + +

+ + + + +# offer总决赛,何去何从! + +最近在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)上,给至少300位录友做了offer选择,准对大家的情况,结合我的经验做一做分析。 + +希望可以给大家带来不一样的分析视角,帮大家少走弯路。 + +以下是我在知识星球里分析的部分案例,公众号上再给大家分享一波。 + +----------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211108102416.png) + +1. C++ 后端,客户端,测开,指定选 C++后端啊,这是送分题。 +2. 转型的问题不好回答,各有各的出路,**就算大厂里,95%以上的程序员都不想写代码,就想指点江山**,但为什么大家都在写代码呢,因为出路没有固定的公式,没有固定的方法,很多人完美转型看的是运气,看时机,也看努力,**但最重要的是运气和时机**。 最不缺的就是努力的人,其实大家都挺努力的。 +3. 不会的,大厂里也没有一家语言独大,这种担心没必要。 +4. 不同公司处理情况不一样,甚至每年都会变,大部分都不会黑名单,你这几家都不会。 +5. 你的担心有点过头了,既然你拿到的offer就要对自己有信心,你也不是走后门拿到的offer,对自己能力这么没信心么,进去之后好好干就好了。剩下的交给缘分。 计划的在周密都没有变化快。 +6. 你问的太全面了[捂脸],我都没想到 拿到大厂offer,能但担心出来 这么多事情。已经很周密了👍 + +最后 倾向于你去阿里云吧,这么好的的机会 有啥犹豫的。 + + +----------------- + + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211108103414.png) + +我感觉你不用不甘心大白菜,其实挺好的,客观来看 非科班转码 拿腾信后端开发的 offer 挺不错的。 + +虾皮在公司影响力上 和 腾讯不是一个数量级的。 + +跳槽虽然看base,但也看公司的,腾讯光环加持 比 虾皮可有力多了。 + +腾讯的总包是有点虚(花样有点多),但第一年到 43w了 挺不错的,腾讯好好干,升到高级工程师,在外年很值钱的。 现在这点钱也不算啥。**而且现在应届生薪资真的挺高的,不用在去追高,容易摔到的**。 + +我建议你直接去腾讯就好, 这个选择题 其实挺好选的。 + +------------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211108103835.png) + +广州没有百度吧,可以活水到深圳百度,工位很宽敞,比北京工位舒服多了。 + +我倾向于选百度吧,而且百度的岗位也不错,薪资也比 虎牙高(虎牙的股票价值不好说),**虎牙你听说是 965 但未必是 965,可能你已入职项目就忙起来了,瞬间996,这个工作强度都不是永恒的,都是跟着项目走**。 + +广州可选择的互联网公司不错的,你去广州虎牙,一旦离职 其实不太好选下一家。 + +百度 试用期不过,这个感觉有点谣言,哪家大厂都有试用期不过的,不过这个看项目组,整体来说 基本试用期都能过,问题不大。 + +虾皮还在抽盲盒,就不考虑了。 + +去百度吧,好好锻炼几年,然后再找机会 回南方。或者transfer 深圳 也不错。 + +------------ + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211108104558.png) + +1. 公积金可以提出来 80%,包括自己交的和公司交的,还是挺方便的,现在支付宝可以一键提取。剩下的等你买房之后 可以全部提取。 + +2. 如果先去腾讯的话,你去 字节 做客户端更合适一些,而且你还是做 游戏直播的客户端,和腾讯互娱还是很匹配的。 + +至于研究生做客户端亏了 的问题,其实 95% 的研究生 基本都是做研发,后端或者客户端。 + +确实很多人感觉 读个研究生不做算法,不搞AI,和本科生没啥区别,**但事实是 搞算法 搞AI 可能都找不到工作了,那么就没有必要有这个执念**。 + +你现在能拿到 字节offer,也有你是研究生的加持 ,虽然 学历不等于能力,但 人多而卷,用学历晒人是最高效的方式。 + +------------ + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211108104735.png) + + +1. 一般来说管培计划,都是培养企业未来高管的,是很不错的,不同原员工干到高管多难,**但如果参加管培计划,那就不一样的,资源 和 机会 要不正常员工 多很多**, 从 去哪给你的薪资和签字费就能看出来。 不过去哪网的管培其实我不了解,我只是说一说普遍管培的情况。 + +2. 小米有很多东西可以学习? 这个其实 你现在是应届生,去哪家公司 都有很多东西可以学习,这个看具体内容了。 +3. 我感觉不用了吧,这offer也不错啊,当然如果还有激情,再战也可以的。毕竟没啥损失,不过感觉可以休息了,躺平吧。 + +建议再去详细了解一下 去哪网管培计划 的具体内容,因为不同公司 管培计划不太一样,你是 技术岗管培 还是其他方向管培。 + + +以上就是我在知识星球,针对录友们offer决赛圈的解答,希望对大家也有所帮助。 + diff --git a/problems/知识星球精选/不喜欢写代码怎么办.md b/problems/知识星球精选/不喜欢写代码怎么办.md new file mode 100644 index 00000000..9bc624bb --- /dev/null +++ b/problems/知识星球精选/不喜欢写代码怎么办.md @@ -0,0 +1,45 @@ + +# 看到代码就抵触!怎么办? + +最近在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里,看到了不少录友,其实是不喜欢写代码,看到 哪些八股文都是很抵触的。 + +其实是一个普遍现象,我在星球里分享了一下,我对这一情况的一些想法。 + +发表在星球里,很快就有了60多个赞,也确实说道大家的心里去了。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211019222938.png) + +我在这里再给公众号的录友们也分享一下: + +很多同学不喜欢计算机,也不喜欢写代码,看到各种大堆的面经 八股文,心里是十分抗拒的。 + +所以总是拿一些其他的事情来拖延,最后发现秋招或者春招 完全拖过去了,或者说等求职的时候发现自己完全没有达到应聘的水平,再陷入 深深的焦虑之中。 + +这里有一个很重要的问题,就是**当你发现你不喜欢计算机的时候,那问问自己喜欢什么呢?** + +如果喜欢看电影,逛街,打游戏,甚至格调再高一点 喜欢画画,喜欢音乐,唱歌之类的,这些爱好如果没有达到专业的程度,那么仅仅是日常消遣而已。(甚至是一种逃避) + +**真实情况是大部分人都说不出来自己真正喜欢什么的**。 + +这是中国教育制度的问题,大家从小学、初中、高中、到大学再到工作 就没有时间或者机会去思考自己真正想干什么。 + +别说在校学生了,就互联网大厂的程序员,我敢说 百分之九十以上 都不喜欢写代码,都感觉写代码是最苦逼的,天天对着屏幕,写写一堆正常人看不懂的英文单词,有啥意思,对吧。 + +但为什么大家都依旧写代码呢。 + +**要生活啊,要赚钱啊!** + +那种可以不考虑经济问题,一言不合就寻找人生意义的选手,都是家里有矿的,那种咱们不讨论。 + +还一些同学迷茫的时候,就放空自己。 还有已经工作的,可能会去一趟西藏,“寻找一下生命的意义”。 + +其实我也是不建议的,**放空自己之后,并不会找到 自己真正的方向,只会更迷茫!** + +所以,**当你不知道自己真正喜欢什么的时候,就先把眼前的事情做好吧!** + +如果你知道自己不喜欢计算机,不喜欢写代码,但也不知道自己究竟喜欢什么的时候,那么就先把自己现在该做的事情做好,制定计划,算法题刷题起来,八股文看起来。 + +**这才是是最重要的**。 + +希望对录友们有所启发,加油💪 + diff --git a/problems/知识星球精选/入职后担心代码能力跟不上.md b/problems/知识星球精选/入职后担心代码能力跟不上.md new file mode 100644 index 00000000..c2704525 --- /dev/null +++ b/problems/知识星球精选/入职后担心代码能力跟不上.md @@ -0,0 +1,55 @@ + +

+ + + + +# 入职后担心代码能力跟不上 + +在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)上,很多录友已经担心自己去了公司工作以后,代码能力跟不上,会压力很大。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031202952.png) + +其实 星球里 也有很多 已经确定offer的录友,想在入职之前提升代码能力,或者说 如何可以更快的融入项目组。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211031203944.png) + +这里我把应届生刚刚工作需要培养的能力都说一说,其实也适用于毕业一两年的录友。 + +## 代码能力 + +练习代码能力最直接的方式就是多写,最简单的是用你的语言写一个管理系统,甚至你每天刷刷题,也是可以的。 + +再直白一遍,不是有26种设计模式,你全都实现一遍,即锻炼 代码能力,还学习了设计模式,等入职之后多看项目代码,看看大家在设计上使用了那种设计模式,或者说哪里还可以优化。 + +设计模式可以说 面试中最实用的知识的,大部分面试内容,工作中其实都用不上,所以大家会发现面试造大炮,工作拧螺丝。 + +## 心态 + +工作之后 从心态上来说,要不怕困难,不怕bug,不怕未知技术。 + +很多同学之所以代码能力弱,**就是太怕 难点**,遇到点 困难 就想:恨不得谁告诉我应该怎么怎么办得了,而不是自己去解决问题。 + +要善于使用搜索引擎,如何所谓问题是一个技术活,有的问题你怎么搜都搜不出来答案,但有的同学一搜 就搜出来了。 + +为什么呢? + +这是遇到问题,提取关键词的能力,很多同学遇到问题,不知道用什么关键词去搜。 + +**还有要有一种 越挫越勇 的精神**,这样你后面 的困难就会越来越少,也会培养出一种自信。 + +写代码也需要自信,工作之后 经常 有一些比较难任务,有的 同学就不敢接,怕做不出来,有的同学就敢接,并不说这位同学技术上一定强,而是他有自信。 + +**这种自信都在是以往 解决各种问题,排查各种bug,练就出来的**。一旦拥有自信,那能量就是 摧枯拉朽,真正的逢山开路遇水搭桥。领导也喜欢这样的组员 + +## 快速成长 + +刚入职的时候,不要怕问问题,不要怕出错,不要怕不好意思。 + +因为你是新人,就算问简单的问题,大家不会嫌弃你,但 这个新人窗口期是很短的,如果 过了几个月 还问一些非常基础的问题,那么 可能职场上就不太好了。 + +所以要在新人窗口期,快速成长,我看过太多的应届生,入职的时候 都是畏头畏尾,然后 过了新人期,能力还没有提高,还问很基础的问题,这样 项目组也不会分给他 有难度的任务,他也就得不到锻炼,越得不到锻炼,就能力越没提升,就越没自信,就越接不到有难度的活,然后陷入死循环! + + +综上,算是从学校到职场的上的一个转变。 希望对大家有帮助。 + diff --git a/problems/知识星球精选/秋招开奖.md b/problems/知识星球精选/秋招开奖.md new file mode 100644 index 00000000..368596b6 --- /dev/null +++ b/problems/知识星球精选/秋招开奖.md @@ -0,0 +1,65 @@ + +

+ + + + +# 开奖 + +最近秋招的录友已经陆续开奖了,同时开奖多少,也是offer选择的一个重要因素,毕竟谁能和钱过意不去呢。 + +[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里这位录友拿到的百度offer薪资确实很高 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211023102430.png) + +以下是我的回答: + +-------------- + +百度给你的这个薪资很不错了,百度一向是大厂里最扣的那个,能给这个价位,说明 面试官对你很满意。 + +语言方面你不用过于纠结,其实学什么语言最终都是为了赚钱是吧,钱给到位了,写啥不都一样么。 + +而且如果后面php 要转go的话,你就还很多锻炼的机会,对你晋升十分有好处,php转go,就是把已有的后端代码全部重写,相当于是重构,就是很多工作可以做。 + +**程序员最喜欢的就是重构**,重构既能提升技术,又能向上邀功(**可以理解就是容易晋升**)。 + +如果是稳定的业务,进去大概率是打杂的,因为没有那么多代码可写,进去就改改bug,写写脚本分析分析日志,之类的,总之不会接触到核心代码,没有机会,也没有必要。 + +但如果稳定的业务 代码要重构,就有机会可以读一读核心代码,分析哪里设计的不好,重写一遍,那就可以大展宏图。 + +这就是为什么程序员都喜欢重构。 + +字节的话 后端-系统架构,这个岗位是可以的,但具体什么部门,具体做什么就不太清楚了,至于你说的边缘部门,如果这个部门就叫做系统架构部的话,不可能是边缘部门。系统架构部门还是挺重要的。 + +但如果 字节和百度选的话,我还是倾向于百度。 百度对新人培养还很到位的,比字节强多了。 + +滴滴就不考虑了, 华为 2012实验室中央软件院,其实是不错的,适合好好搞技术,但关于 多媒体开发 这块 要看具体工作了。 +2012 一般薪资开的不高,毕竟不是华为的业务部门。 + +如果百度过几天逼签的话,就签了吧,挺香的,总包都40w+了,百度一向是很抠的,**这个价位,百度是下血本了**。 + +如果还能拖,就等 字节 和 华为开奖,如果能开到 50w+,那就考虑考虑。 + +如果薪资差不多,就百度吧。 + + +------------- + +这位录友最后也决定签百度了。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211021234705.png) + +大家也注意到,这位录友是把《代码随想录》刷了两篇,这里我也是推荐大家至少要把 《代码随想录》上的题目刷两遍,才能真正的掌握我讲解的内容,第一遍大家可能就是力扣提交通过了,然后这道题目就过了,没有深入去思考,也没有深入去看我的题解。 + +但第二遍的时候,就可以深入思考 上一道题目与本题之间的联系,动态规划或者二叉树的题目套路 等等了。 + + +还有这位录友在星球里提到,用了我推荐的项目,其实这就是这个:[基于跳表的轻量级KV存储引擎](https://mp.weixin.qq.com/s/i3vJd0nPqQFyLRH9Px84YA) + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211023103749.png) + +这个项目是我18年的时候,业余时间写的,大家如果按照我的代码来,从代码质量到结构设计,绝对是可以拿得出手的。 + +但我没有写这个项目的详细教程,很多基础不太好的录友可能看着有点费劲,后面我会在B站上出一期详细的讲解视频,公众号也会同步文字版本。 + diff --git a/problems/知识星球精选/秋招总结1.md b/problems/知识星球精选/秋招总结1.md new file mode 100644 index 00000000..efec67ee --- /dev/null +++ b/problems/知识星球精选/秋招总结1.md @@ -0,0 +1,194 @@ +

+ + + + +# 无竞赛,无实习,如何秋招? + +今年秋招已经结束了,今天给大家介绍一位知识星球里的录友,我也是见证了他一步一步准备,从绝望到看到希望再绝望到最后拿到offer的全部过程。 + +我记得给他改简历的时候,就说过他冲客户端的话,可能更稳一些。 + +时间总是过得很快,但曾经焦虑的小伙,现在也拿到几个offer了,不一定人人都要冲大厂,卷算法,卷后端,合适自己就好,要不然会把自己搞的很累。 + +以下是他的秋招总结,**写的很用心,说了很多面试中使用的方法,发在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里,立刻就引来星球小伙伴们的围观**,算是给星球里明年要秋招的录友做了一个参考。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211109231150.png) + +我也征求了他本人的同意,将其分享在公众号上,希望对大家有所启发。 + +以下原文: + + +## 个人背景 + +* 学校:末流985 +* 学历:本科 +* 所学专业:网络空间安全 +* 意向岗位:后端开发 +* 校内学习情况:**无竞赛,无实习经历,自己平时也没有捣鼓过任何项目,只是跟着学校的课程学习**😅。 + +## 秋招时间线 + +(**加粗内容为时间节点**,中间还穿插着各种笔试,这里就不列举了) + +* 二月初-二月中旬:开始刷leetcode +* 三月初-四月初:背八股文,刷题,同时投递实习岗,但由于个人实力不足以及投递时间太晚,一面均未通过 +* 四月-七月:完成学校内的课程,准备专业课考试,同时背八股文,不断地重复刷算法题 +* **七月二十六日**:收到字节跳动**客户端软件安全工程师**岗位的面试邀请 +* 八月初:面试**腾讯**后台开发岗,一面挂 +* **八月十五日**:通过字节的三轮专业面试和一轮hr面拿到**意向书** +* 八月下旬:连续面试美团,蚂蚁;美团一面挂,蚂蚁一面通过 +* **九月三日**:蚂蚁二面通过 +* **九月十三日**:成为字节跳动实习生,提前感受工作内容 +* 九月下旬:**通过五轮面试**:蚂蚁三面和hr面;华为两轮技术面和主管面 +* **十月二十九日**:收到字节正式offer +* **十一月五日**:收到华为意向书 + +小结: + +- 面试的企业:华为,字节,蚂蚁,腾讯,美团 +- 通过的企业:华为,字节(蚂蚁泡池子) +- 字节客户端安全-深圳 +- 华为软开-深圳(东莞):14a +- offer选择:大概率华为,中概率字节,小概率春招再战 + + + +## 技能准备 + +### 算法和数据结构 + +掌握程度: + +- 代码随想录 上的题目:programmercarl.com, 除了单调栈以外的所有题目都做过,且大部分题目**3-7**刷。 +- leetcode总共题数:219题。 +- (https://www.nowcoder.com/ta/huawei )做了68道。 +- 二叉树,红黑树,B+树,数组,链表,堆栈等基础知识均掌握。 + +取得的效果: +- 95%的面试题都能做出来,能讲出时间,空间复杂度和实现思路,但没见过的题目不一定能想出最优解。 +- 华为笔试:200分 (100分通过) ,蚂蚁笔试通过率:70%,网易笔试通过率:80%。 + +### 学习建议 + +按照卡哥**出题的顺序**刷,且要**重复刷**,**不能只是背代码**。还记得春招的时候,面试官问我**两数之和**,我能把代码写出来,但当问到实现思路,为什么这么实现,我答不上来;相类似的还有**二叉树迭代法的统一写法**,当面试官问我为什么这么写的时候,我说不知道:sob: + +把卡哥的题刷得差不多的时候,建议再刷两个专题: + +* 二分法 :https://leetcode-cn.com/problems/search-insert-position/solution/te-bie-hao-yong-de-er-fen-cha-fa-fa-mo-ban-python-/) +* 滑动窗口:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/hua-dong-chuang-kou-by-powcai 。 + + +笔试题刷题要点: + +- **多刷**,**多刷**,**多刷**,**熟悉ACM格式** +- 面试题刷题要点: + - **时间,空间复杂度** + - **优化方案** + - **解题思路** + +以下是本人对各个知识块的掌握情况: + +### 计算机网络 + +掌握程度:应用层到数据链路层常考题都背得很熟悉,但细节没记到位,美团曾经问过我**tcp报文的可选字段**,没答上来。 + +### 操作系统 + +掌握程度:熟悉常见面试题,但当问到特别具体的问题时难以回答,比如:给一个具体的虚拟地址,请求出它映射到的物理地址。 + +### 数据库 + +掌握程度:这部分掌握得最少,仅限于面经里MySQL的面试题:cold_sweat:。 + +### C++ + +掌握程度:基础面试题,stl,面向对象等面试题滚瓜烂熟,但面试的时候语言考察得很少,我遇到过的只有:**malloc**底层实现,**stl**相关底层原理。 + +### 项目 + +提前准备好以下问题的答案: +- 为什么要做这个项目? +- 是**为了解决什么问题**? +- 项目的性质是什么? +- 多少个人完成? +- 你负责了什么工作? +- 有什么亮点?难点? +- 运用了哪些技术? +- 有什么收获? + +## 经验技巧 + +### 模拟问答 + +把**一切**在面试中可能被问到问题的**答案背下来**,假设你的对面有一个面试官,把问题的答案说给他听,这样有几个好处: + +1. **锻炼表达能力**。有过面试经验的同学应该可以感受到,明明自己对一些问题很了解,但面试时讲得磕磕巴巴,逻辑不清晰。 + +提前模拟面试场景,可以帮助你提前发现**语言表述上的问题**,以达到在面试过程中**清晰表述内容**的效果。 + +2. **查漏补缺**。在回答问题时,自己很有可能产生一些**疑问**,而这些疑问也是面试官**特别喜欢**考察的地方。 + +举例: + +- 面试官问:进程和线程的区别? +- 回答: +- 进程切换比线程切换开销小 +- ....... +- 面试官追问:进程切换开销**小在哪**?你能详细描述出进程切换的具体过程吗? + +如果你能在面试前自己发现这个问题,查漏补缺,面试的时候也会更游刃有余。 + +### 转移话题 + +转移话题,即改变话题方向。 + +举例: + +面试官问:为什么使用DH对称加密算法而不使用其他其他对称加密算法? + +两种回答: + +* 这个我没想过:sob: +* 我在完善项目时**不侧重于**将其与其他算法比较,而是把**精力更多地放在**DH算法的改进和优化上。 + +针对第二个回答,面试官会追问,那有哪些优化呢?而这个恰恰是我背得滚瓜烂熟的地方😍。 + +### 关于实习 + +实习重要吗?很重要,我去提前实习后,更清楚了企业看中实习经历的原因:**节省培养成本**,更快上手业务。 + +没有实习经历可以吗?可以,如果时间紧迫,秋招/春招前没有实习机会,那就花时间**把实习期需要学习的事情去做一做**,例如:学习GIT,搭建博客,学习开源项目,学习linux等(当然这些我实习前都没做,是实习的时候才知道的:joy:),这些放在简历上也是加分项。 + + +## 与代码随想录的故事 + +### **算法** + +今年二月初,刷题的时,看到carl哥的题解,觉得讲得很不错,关注了微信公众号:代码随想录。于是我就按照刷题攻略的顺序进行刷题,题解讲得很详细。在秋招前我几乎把当时所有题都刷完,而且刷了好几遍。面试时的出题命中率**真的很高(字节,蚂蚁的出的所有算法题都被包含在内)**,即使不是原题,实现的算法也是类似的。 + + + +### **公众号文章** + +公众号里的文章我也非常喜欢,比如各城市互联网公司的总结,之前一直没太注意这个事情,觉得头部不就是那几个大厂吗?冲就完了。秋招过后觉得这篇文章还是挺有用的,因为眼光**不能只局限于互联网大厂**,并不是任何时候都应该向大厂冲,适合自己才是最重要的。 + + + +### **知识星球** + +后来卡哥开了知识星球,我马上就申请进来了,这段时间一直在打卡,督促自己学习。星球上主要分为两大块内容:打卡系列和问答系列。 + +- 打卡系列,记录着各位同学的每日学习情况,其中有不少文章都总结得用心。 + +- **问答系列(对我帮助很大)**,主要包括**offer选择**,**学习路线**,**学习建议**;每天都会有同学提出自己的问题(当然我也问了不少),carl哥的回答很真诚,**也很有参考价值。** + + + +## 小结 + +秋招已告一段落, 这段时间真的经历了很多事情,虽然现在对结果没有很满意,但也积累了一些经验,走一步看一步吧。 + +大家可以结合着我的经历思考这么一个问题:**知识掌握到什么程度可以拿到一个什么水平的offer**?最后,祝大家都能拿到自己满意的offer~ + diff --git a/problems/知识星球精选/秋招总结2.md b/problems/知识星球精选/秋招总结2.md new file mode 100644 index 00000000..7f4b6770 --- /dev/null +++ b/problems/知识星球精选/秋招总结2.md @@ -0,0 +1,48 @@ +

+ + + +# 倒霉透顶,触底反弹! + +星球里不少录友秋招已经陆续结束了,很多录友都在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里写下了自己的秋招总结,但今天这位录友很特殊,甚至我给她修改简历的时候我都“有点愁”。 + +他的秋招过程也是极其坎坷,**逼签、被养鱼最后收到感谢信、校招流程收到实习offer,还有数不清的简历挂……**,可能是太倒霉了,最后触底反弹,接到了百度的offer,虽然是白菜价,但真的很不错了。 + +这篇总结并没有说学习路线,而是说一说她自己的感想,算是另一个维度,感觉会对大家很有帮助,所以我也分享出来。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211114111745.png) + +以下星球原文: + +------------- + +秋招终于结束了,收到了百度C++开发、小米C++音视频开发、深信服C++开发、知乎go后端、神策java后端的offer,不是啥大佬,全是烂白菜,但是作为一个双非本的孩子,我觉得已经很幸运了,最终无脑选择了百度,春招还会再冲一波。 + +**星球里的学习气氛很好,向卡尔哥问过好几个问题,每个都挺长,卡尔哥也给我耐心解答过,还帮我改过简历,感谢和大家相遇!** 关于学习路线大佬们说的很详细了,我觉得参考他们的已经足够有价值。**那我就为星球里还在奋斗的兄弟姐妹、以及学弟学妹们写一下我的一些其他的感想**。 + +1、**准备一定要趁早**。我是今年1月份准备的实习,那个时候我连C++智能指针都不知道,就一直陆续学着,6月份上岸滴滴实习,8月下旬跑路,可以说9月份才开始大规模投递。我是很菜的人,还不算勤奋,秋招不至于空手而归就是找实习的时候还有些积淀。 所以最大的感想就是,一定要越早越好,我认为理想的时间节点:3月份去实习,7月份投提前批,所以什么时候去准备可以根据这个时间去准备,当然越早越好。越早企业越缺人,越好进。 + +2、**多面试,哪怕实习不了也要多面试;多投简历,投了就有机会**。我没啥自主学习的意识,只有在要面试的前一个礼拜才会多少看点,还记得当时收到第二天就要腾讯面试的消息,前一天晚上我几乎通宵了,虽然最后还是挂了。但是我当时真的是要面试的恐惧支配着我学习 。 + +3、**八股文、看书和刷题**。实习面试的话看八股文还是能应付过去的,但是我看了大多数八股文感觉千篇一律,想真正化为自己的东西还是要看书,我一般喜欢看书,然后把书上的东西化为自己的理解记在笔记上。 刷题也是,我一般喜欢根据自己的理解把题归类,自己写题解。 + +4、**实习。我觉得实习比较好的时间节点是3月份(或者更早)**,暑假去实习如果不能保证转正,感觉还是有点耽误提前批,提前批是最最最好进大厂的一次。像我的话,白天工作一天到晚上九十点,回家就只想躺着,再遇上比较push的工作环境,做到实习和复习兼顾是有点难的。我觉得核心竞争力应该是基础知识的掌握程度,身边确实没有实习、但是基础和项目足够牛批的人也能进大厂,所以还需要做一个平衡吧。当然也不是劝退,实在平衡不了的话就要要根据自身情况吧。 + +但是实习确实让我简历好过了一些,这个就是实习最大的好处之一,但是我感觉像美团腾讯百度的话,如果笔试面试还可以的话,应该不太卡简历的。字节后端确实有点卡实习,还有一些没那么大但是也很强的厂是卡学历或者实习的。 + +5、还有秋招不要all in,不要all in ,不要all in!!! + +以上就是我的一些感想,可能仁者见仁智者见智,希望大家多多指正。 + +我的秋招真的不是很顺利。逼签、被养鱼最后收到感谢信、校招流程收到实习offer,还有数不清的简历挂……,但是最后也有好的结果了,其实想的比较开,大不了就春招再进大厂呗。本来都要打算春招了,书都买了几本,但是没想到能收到百度意向,已经开始流程推进啦。 + +可能这就是倒霉透顶了就触底反弹吧。**一直觉得自己倒霉透了,奇葩的时间都被我遇上了,但是最后还是被好运眷顾了一下**。我的学校还是双非本,很一般的学校,所以任何时候都有机会,拿到offer不光是实力因素,运气成分也很大,大家一定要多投多面,万一哪次就上岸大厂了。 + +**还是想参与一下春招,但是现在发现躺着太舒服啦**。还是得卷起来,争取以后能每天在星球里打卡哈哈 + +祝愿各位都有理想的offer!所愿皆所得! + +------------- + +以上就是星球里的原文,所以这位录友现在又可以愉快的在星球里,每日打卡了 哈哈哈。 + diff --git a/problems/知识星球精选/秋招总结3.md b/problems/知识星球精选/秋招总结3.md new file mode 100644 index 00000000..895c1b8c --- /dev/null +++ b/problems/知识星球精选/秋招总结3.md @@ -0,0 +1,83 @@ +

+ + + +# 秋招面试,心态很重要! + +其实无论社招,还是校招,心态都很重要,例如,别人那个一堆offer,自己陷入深深的焦虑。 面试分明感觉自己表现的不错,结果就是挂了。面试中遇到了面试官的否定,然后就开始自我怀疑,等等等。 + +如果你也遇到这些问题,可以认真读完[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里一位录友的总结,他是非科班,机械转码,今年5月份加入的星球,坚持打卡几个月,如果也获得自己心仪的offer,他的心路历程对大家会很有启发。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211121093438.png) + +以下原文: + +---------------------- + +写在最前:作为最一般的秋招选手,希望能对和我有相似经历的录友提供一些帮助。 + +1、个人情况:本硕211机械转码,无竞赛,无实习。转码原因:机械的工资真的不高,也不是很喜欢天天画图的生活;导师教本科C/C++语言,研一当助教重新学了一下C++。 + +2、加入星球: + +3月份开学决定转码,3月到5月看C++primer和刷题,之前也是按题目顺序刷,效果一般。我是在LeetCode刷题的时候看到Carl哥的题解,然后关注随想录的GitHub,刷完链表在5.27决定加入的星球(那时还没有优惠,哈哈)现在也快半年了,那段时间是我最慌的时候,毕业课题没做完,秋招准备的也不行。刚看完C++ Primer,刷了几十题的状态。就是在星球打卡的这段时间学习比较认真,让我走过了比较难的一段路,感谢Carl哥的指导和各位录友的输出。(用Forest防止玩手机并记录了一下,6~9月平均学习15000分钟) + +3、秋招历程: + +6月到7月,C++基础就每天看一条《effective C++》,操作系统和计算机网络看书来不及就准备找网上大佬的精华过一遍然后直接面经。我找的是小林大佬的图解网络+图解操作系统,阿秀大佬的面经。(每日一问的主要来源)。 + +刷题大概每日一题+3道随想录+2剑指offer,7月完成一刷,8月底完成二刷。一刷的时候白天在LeetCode提交之后,晚上会在本子上手写总结一遍,理一理思路。二刷的时候就在Typora上快速记录了一下,节约时间。开始面试的时候题量:二刷完随想录+剑指offer,一共350题左右。在刷完以后可以上CodeTop刷各公司部门岗位的高频题。 + +7月份有的公司就陆陆续续开始提前批了,虽然知道提前批不需要笔试多一次机会,但是因为自己简历项目一块还比较单薄,一直没有进行投递。7月底买了《高性能服务器编程》一周多看完,然后做了一个基础的Web服务器,有不懂的就上网搜类似的解析。自己画了一下流程图之类的梳理了一下大概思路。第二个项目就是Carl哥的跳表项目,不是很长,主要是理解跳表这个数据结构,自己画一画就清楚了。 + +8月底开始投简历,对自己定位比较明确,主要以中厂为主,大厂随缘。8月底开始基本每天都有笔试,9月开始面试,一直到10月下旬结束秋招。面试的时候主要是录音,结束后进行面试总结,包括面试问题,手撕代码,面试表现(回答问题思路是否严谨,吐词是否清晰)。 + +其余关于实习,竞赛,面试的经验可以参考星球里其他大佬,哈哈哈。我感触比较深的是心态问题,这里写一写我自己遇到的心态问题和感想。 + + +4、心态很重要: + +心态问题1:同学或室友提前批就拿到了30大几w甚至更高的的offer,自己才开始笔试,说不羡慕是不可能的,有几天晚上都有一点焦虑没有睡好。这可能是因为自己并没有全力以赴,害怕因为自己的不努力而失去机会,后来每天都在按计划学习,每天都比较充实,抱着努力不后悔的心态。当你一心学习的时候就不太会一直考虑让自己焦虑的问题,总之一句话,冲就完事了。 + +心态问题2:总感觉自己没有准备好而不敢投简历。项目没准备或者面经记得不熟。其实投了简历以后还会有一段时间,包括HR筛简历,测评笔试才到面试,所以能投尽早投,在面试之前有压力的时候复习效率比较高的。 + +心态问题3:面试时的心态:心里默念一定要思考一下,然后慢慢说。我有一次面试,前面几个问题不是很顺利,然后问了我一个我会的,我就把我想到的一股脑说出来,我想着终于遇到一个我会的了,自我感觉良好,结果面试结束复盘的时候才发现,那个问题说的不是很全面而且说的比较快,面试官感觉可能很一般。 + +心态问题4:有时可能会紧张的不行,导致本来自己知道或者有思路而因为紧张语无伦次没有表达出来,从而影响面试表现(可以事先准备好自我介绍,流畅的自我介绍在一定程度上可以建立信心,减缓紧张。参加一些模拟面试,找同学模拟或者在网上模拟,还可以录一下视频,看一下自己的表现怎样,有什么地方需要注意;找一些中小厂练手实战也不错) + +心态问题5:面试后的心态,可能有时候觉得自己表现还不错但是面试挂了而愤愤不平,或者和同学一起面一家公司,同学过了,自己挂了。这个时候需要把心态放平,及时总结自己的面试表现,可能没有你想象的那么好。而且面试主观因素挺多的,结果和面试官有很大关系,所以做好自己,尽人事听天命。 + +心态问题6:面试过程中可能会遇到比较不好的面试官,导致面试体验比较差而影响自己的心态,这个时候也是需要及时发泄,不要自我否定或赌气,想着后面还有更多的机会,把更多精力投入到下一次面试或笔试中。我遇到的面试官都比较nice的,希望大家也一样! + +5、写在最后: + +最后对主要面试结果做一个总结:腾讯(笔试挂),百度(二面挂),最后拿到的:华为通用软开,深信服C++开发,科大讯飞C++,中电28所,30所。最后选择离家近的成都华为,总的来说虽然没去成大厂,但是自己已经很满意了。 + +最后的最后:说的有点多,比较啰嗦,感谢大家能看完。希望大家一定不要放弃,相信自己,能拿到自己想要的offer!! + +--------------- + +可以看一下这篇总结在星球下的评论: + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211121094859.png) + +**他在星球里知名度还是很高的,为啥知名度这么高呢?** + +因为他坚持几个月的打卡,而且打卡质量非常高,所以星球里的录友们都认识他。 + +来看看他的打卡内容: + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211121095337.png) + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211121095415.png) + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211121095712.png) + +我只是随便选了几条,他有将近200条的打卡记录,如果大家也在准备明年秋招,可以进星球里看看他的每日的打卡记录,相信会对规划自己的学习计划,任务安排 都很有帮助。 + +而且星球里的学习氛围会让你惊讶,原来有这么多大佬,还这么努力。 + +![星球氛围好](https://code-thinking-1253855093.file.myqcloud.com/pics/20211018000722.png) + +![看星球里的内容收获满满](https://code-thinking-1253855093.file.myqcloud.com/pics/20211025182654.png) + diff --git a/problems/知识星球精选/逼签.md b/problems/知识星球精选/逼签.md new file mode 100644 index 00000000..90e4e67d --- /dev/null +++ b/problems/知识星球精选/逼签.md @@ -0,0 +1,51 @@ + +# 遭遇逼签,怎么办? + +最近各大公司陆续开奖了,也有不少公司开始逼签了。 + +为什么会有逼签呢,无疑就是 这家公司你不太想去,但还想要一个保底(备胎),同时这家公司也知道自己竞争力可能不是很大,也不想当大家的备胎,所以就要三天内必须签三方。 + +如果是心仪的公司要求三天内签三方,我相信大家就没有被逼签的感觉了,哈哈哈 + +[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ)里很多录友都问我,XX公司又要逼签了,怎么办。 我在公众号也分享一下,希望对大家有所帮助。 + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211017093816.png) + +以下是我的回答: + +TPLINK 的嵌入式,确实有点偏,但钱给的还真多 (估计是发现不好找人了)。 + +从发展来看,当然百度 虾皮 是首选,百度一般薪资不高,但我估计 虾皮薪资应该可以。 + +虾皮如果 10月底 才下offer的那,一般有更好的offer的同学 指定早就签了,我估计虾皮是能接受 毁约三方 也就是等你毁约三方,再签虾皮的 (注意,这是我猜的),要不 10月底 在下offer,优秀的毕业生遭抢没了。 所以如果能联系上HR的话,可以问一问,是否一定要三方。 + +你去签 TPLINK 三方的时候 也问问,毁约的流程,TPLINK 什么时候会退给你三方,如果是 TPLINK HR很坚决 不接受毁约的话,就等百度 和虾皮吧,到时候谈薪资的时候 拿tplink这个作为依据,高点要薪资。 + +如果 TPLINK HR 能接受毁约,给出 毁约 流程的话,那就签了。 (但这里不能排除 HR 口是心非,说是能毁约,最后不给你退三方的情况,所以多问问 有没有师兄毁约 TPLINK成功的) + +我当初校招的时候签的就是华为,也给三方了,毁约去的腾讯。我腾讯都入职了,华为才把三方退回来,我在补上三方,所以腾讯是不要求三方的,只要人去了就行。这个也看公司的。 + +------------- + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211017094407.png) + +以下是我的回答: + +7月开始自学c++,秋招就能拿到这些offer已经很棒了👍 + +先看逼签的这两家,其实我都不太了解,我的朋友们主要都在互联网圈,所以 没有认识的朋友在这两家公司。 + +不过 thoughtworks 网评不太好,说是外包公司, 中孚信息 至少是土生土长的企业,做网络安全,也是上市公司,至少会靠谱一些。 + +华为成都 光产品线的测开,如果你想真的有增进技术的心,测开就稍差了一些。 + +相对来说 小米南京的offer 还不错,但还在池子里。 + +如果逼签的话,优先考虑中孚吧。 + +关于 好好沉淀准备春招 当然是可以的,但不是每个同学都是劲再去冲春招了,找工作都是一鼓作气,如果你还能高强度的准备面试冲刺春招,当然是好的。 + +关键是 还有外部因素,毕业的事,以及大家该保研的保研了,找到工作了都吃喝玩乐了,天天聚餐,这个氛围下,你还能不能继续高强度冲刺了, 这才是你要考虑的。 + +加油💪 + diff --git a/problems/知识星球精选/非科班的困扰.md b/problems/知识星球精选/非科班的困扰.md new file mode 100644 index 00000000..d5fea532 --- /dev/null +++ b/problems/知识星球精选/非科班的困扰.md @@ -0,0 +1,54 @@ +

+ + + + +# 非科班的困扰! + +在[知识星球](https://mp.weixin.qq.com/s/QVF6upVMSbgvZy8lHZS3CQ) 里很多录友都是非科班转码的,也是要准备求职,或者准备明年秋招,非科班的录友其实对 准备找工作所需要的知识不太清楚,对其难度也不太清楚,所有总感觉准备起来心里没有底。 + +例如星球里有这位录友的提问: + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211024102300.png) + +我在知识星球里,给出了详细的C++后端学习路线,包括计算机基础的学习路线, + +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211024103006.png) +![](https://code-thinking-1253855093.file.myqcloud.com/pics/20211024103108.png) + +当然路线很长,这里我就截图了一部分。 + +但即使这样,其实非科班的录友也不容易量化具体的工作量究竟多大。 + +以下是我对这位录友的回答: + +---------------- + +具体学习时间 一般是不好量化的。 + +一本书,有的同学 一周就看完了,有的同学 两个月看不明白,**基础程度,学习速度,每天的投入时间,以及效率**都是不一样的。 + +**所以要靠自己 规划时间,自己是最了解自己的**。 + +C++primer 不要耗太久,差不多就去看 effective C++。 + +还有计算机求职需要准备的知识不是线性排列的。 + +例如很多非科班的录友可能会这样安排: 几个月搞定编程语言,几个月搞定算法,几个月搞定操作系统! + +**如果这么学的话,那就凉凉了**。 + +求职准备主要围绕这么几块:编程语言 + 算法 + 计算机基础(操作系统,数据库,网络,设计模式)+ 项目 。 + +**这几块都可以一起搞的,一天都要分配点时间,知识错开点来学,效率更高**。 + +每一块知识,每天都要投入一点,例如,例如一天算法几个小时,编程语言几个小时,计算机基础几个小时,项目几个小时,这样分配,当你发现 操作系统比你想象中的难,你就 下周及时调整计划,操作系统每天多分配时间。 + +**正常的学习节奏是这样根据自己的掌握程度动态调整的**。 + +在整体进度上,可以先保证都过一遍,第一遍看的时候,不要死扣细节,会非常耽误时间,先过一遍有整体性的把控 更重要。 + +之后在针对面经或者八股文,去一个难点一个难点的攻克。 + +希望对非科班的录友们有所启发,加油💪 + From 5ffd1de55b5a67edc81a68c76cb20c8ffa9ce10b Mon Sep 17 00:00:00 2001 From: youngyangyang04 <826123027@qq.com> Date: Fri, 26 Nov 2021 11:56:35 +0800 Subject: [PATCH 13/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E5=99=A8=E6=B4=BB=E5=8A=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 0fd937f3..12781e77 100644 --- a/README.md +++ b/README.md @@ -577,4 +577,10 @@

+# 服务器 +

阿里云服务器,双11特价活动🔥🔥🔥🔥

+

+ + + From 009662f6350017914db18adcbf0cef8c1aa522d4 Mon Sep 17 00:00:00 2001 From: qiuxuewei Date: Fri, 26 Nov 2021 14:26:01 +0800 Subject: [PATCH 14/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=2020.=20=E6=9C=89?= =?UTF-8?q?=E6=95=88=E7=9A=84=E6=8B=AC=E5=8F=B7=20Swift=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0020.有效的括号.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/problems/0020.有效的括号.md b/problems/0020.有效的括号.md index 57aa5a01..5f597a1a 100644 --- a/problems/0020.有效的括号.md +++ b/problems/0020.有效的括号.md @@ -283,6 +283,29 @@ var isValid = function(s) { }; ``` +Swift +```swift +func isValid(_ s: String) -> Bool { + var stack = [String.Element]() + for ch in s { + if ch == "(" { + stack.append(")") + } else if ch == "{" { + stack.append("}") + } else if ch == "[" { + stack.append("]") + } else { + let top = stack.last + if ch == top { + stack.removeLast() + } else { + return false + } + } + } + return stack.isEmpty +} +``` -----------------------

From 9b6e798285eeb28dcd0ab117c25a75ff03e85c38 Mon Sep 17 00:00:00 2001 From: ArthurP Date: Sat, 27 Nov 2021 19:39:02 +0000 Subject: [PATCH 15/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=200131.=E5=88=86?= =?UTF-8?q?=E5=89=B2=E5=9B=9E=E6=96=87=E4=B8=B2.md=20C=E8=AF=AD=E8=A8=80?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- problems/0131.分割回文串.md | 95 ++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) diff --git a/problems/0131.分割回文串.md b/problems/0131.分割回文串.md index f674835d..075734ea 100644 --- a/problems/0131.分割回文串.md +++ b/problems/0131.分割回文串.md @@ -450,6 +450,101 @@ var partition = function(s) { }; ``` +##C +```c +char** path; +int pathTop; +char*** ans; +int ansTop = 0; +int* ansSize; + +//将path中的字符串全部复制到ans中 +void copy() { + //创建一个临时tempPath保存path中的字符串 + char** tempPath = (char**)malloc(sizeof(char*) * pathTop); + int i; + for(i = 0; i < pathTop; i++) { + tempPath[i] = path[i]; + } + //保存tempPath + ans[ansTop] = tempPath; + //将当前path的长度(pathTop)保存在ansSize中 + ansSize[ansTop++] = pathTop; +} + +//判断字符串是否为回文字符串 +bool isPalindrome(char* str, int startIndex, int endIndex) { + //双指针法:当endIndex(右指针)的值比startIndex(左指针)大时进行遍历 + while(endIndex >= startIndex) { + //若左指针和右指针指向元素不一样,返回False + if(str[endIndex--] != str[startIndex++]) + return 0; + } + return 1; +} + +//切割从startIndex到endIndex子字符串 +char* cutString(char* str, int startIndex, int endIndex) { + //开辟字符串的空间 + char* tempString = (char*)malloc(sizeof(char) * (endIndex - startIndex + 2)); + int i; + int index = 0; + //复制子字符串 + for(i = startIndex; i <= endIndex; i++) + tempString[index++] = str[i]; + //用'\0'作为字符串结尾 + tempString[index] = '\0'; + return tempString; +} + +void backTracking(char* str, int strLen, int startIndex) { + if(startIndex >= strLen) { + //将path拷贝到ans中 + copy(); + return ; + } + + int i; + for(i = startIndex; i < strLen; i++) { + //若从subString到i的子串是回文字符串,将其放入path中 + if(isPalindrome(str, startIndex, i)) { + path[pathTop++] = cutString(str, startIndex, i); + } + //若从startIndex到i的子串不为回文字符串,跳过这一层 + else { + continue; + } + //递归判断下一层 + backTracking(str, strLen, i + 1); + //回溯,将path中最后一位元素弹出 + pathTop--; + } +} + +char*** partition(char* s, int* returnSize, int** returnColumnSizes){ + int strLen = strlen(s); + //因为path中的字符串最多为strLen个(即单个字符的回文字符串),所以开辟strLen个char*空间 + path = (char**)malloc(sizeof(char*) * strLen); + //存放path中的数组结果 + ans = (char***)malloc(sizeof(char**) * 40000); + //存放ans数组中每一个char**数组的长度 + ansSize = (int*)malloc(sizeof(int) * 40000); + ansTop = pathTop = 0; + + //回溯函数 + backTracking(s, strLen, 0); + + //将ansTop设置为ans数组的长度 + *returnSize = ansTop; + //设置ans数组中每一个数组的长度 + *returnColumnSizes = (int*)malloc(sizeof(int) * ansTop); + int i; + for(i = 0; i < ansTop; ++i) { + (*returnColumnSizes)[i] = ansSize[i]; + } + return ans; +} +``` -----------------------
From 9fd8ea55fa2cc9a0a473481894cffe500c4b2afe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=81=E5=AE=A2=E5=AD=A6=E4=BC=9F?= Date: Mon, 29 Nov 2021 14:07:20 +0800 Subject: [PATCH 16/16] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=201047.=20=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E5=AD=97=E7=AC=A6=E4=B8=B2=E4=B8=AD=E7=9A=84=E6=89=80?= =?UTF-8?q?=E6=9C=89=E7=9B=B8=E9=82=BB=E9=87=8D=E5=A4=8D=E9=A1=B9=20Swift?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...删除字符串中的所有相邻重复项.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/problems/1047.删除字符串中的所有相邻重复项.md b/problems/1047.删除字符串中的所有相邻重复项.md index 66f34978..e43ab59f 100644 --- a/problems/1047.删除字符串中的所有相邻重复项.md +++ b/problems/1047.删除字符串中的所有相邻重复项.md @@ -319,6 +319,22 @@ char * removeDuplicates(char * s){ } ``` +Swift: +```swift +func removeDuplicates(_ s: String) -> String { + let array = Array(s) + var stack = [Character]() + for c in array { + let last: Character? = stack.last + if stack.isEmpty || last != c { + stack.append(c) + } else { + stack.removeLast() + } + } + return String(stack) +} +``` -----------------------