📖本篇內容:leetcode每周.周賽第276場周賽 字符模擬+ 貪心考察 + 動歸考察 簡單與中等 誰說打了周賽會動不了筆
📑 文章專欄:leetcode周賽打卡《周周打卡》
📆 最近更新:2022年1月16日 leetcode每周.周賽第277場周賽
🙊個人簡介:一只二本院校在讀的大三程式猿,本著注重基礎,打卡演算法,分享技術作為個人的經驗總結性的博文博主,雖然可能有時會犯懶,但是還是會堅持下去的,如果你很喜歡博文的話,建議看下面一行~(瘋狂暗示QwQ)
🌇 點贊 👍 收藏 ?留言 📝 一鍵三連 關愛程式猿,從你我做起
本文目錄
- 寫在前面
- 第276場周賽——2022-01-16
- T1.5980. 將字串拆分為若干長度為 k 的組
- 題目
- 示例
- 提示
- 思路
- 代碼實作
- 執行結果
- T2.5194. 得到目標值的最少行動次數
- 題目
- 示例
- 思路
- 代碼實作
- 執行結果
- T3.5982. 解決智力問題
- 題目
- 示例
- 提示
- 思路
- 代碼實作
- 執行結果
- 寫在最后
寫在前面
🙊小付來嘍,今天整點不一樣的板塊,因為今天小付第一次開始打周賽,也因為記錄一下leetcode周賽周日志,來加深一下現如今的部分企業對基礎演算法的要求等,也當是對自己演算法只是再次理解應用,話不多說,來看看這第276場周賽,有些什么妖魔鬼怪題,
第276場周賽——2022-01-16
T1.5980. 將字串拆分為若干長度為 k 的組
題目
字串
s可以按下述步驟劃分為若干長度為 k的組:
第一組由字串中的前 k 個字符組成,第二組由接下來的 k 個字串組成,依此類推,每個字符都能夠成為某一個組的一部分,
對于最后一組,如果字串剩下的字符不足 k 個,需使用字符 fill來補全這一組字符,
注意,在去除最后一個組的填充字符 fill(如果存在的話)并按順序連接所有的組后,所得到的字串應該是 s ,
給你一個字串s,以及每組的長度k和一個用于填充的字符fill,按上述步驟處理之后,回傳一個字串陣列,該陣串列示s分組后 每個組的組成情況 ,
示例
示例1:
輸入:s = "abcdefghi", k = 3, fill = "x"
輸出:["abc","def","ghi"]
解釋:
前 3 個字符是 "abc" ,形成第一組,
接下來 3 個字符是 "def" ,形成第二組,
最后 3 個字符是 "ghi" ,形成第三組,
示例2:
輸入:s = "abcdefghij", k = 3, fill = "x"
輸出:["abc","def","ghi","jxx"]
解釋:
與前一個例子類似,形成前三組 "abc"、"def" 和 "ghi" ,
對于最后一組,字串中僅剩下字符 'j' 可以用,為了補全這一組,使用填充字符 'x' 兩次,
因此,形成 4 組,分別是 "abc"、"def"、"ghi" 和 "jxx" ,
提示
1 <= s.length <= 100
s 僅由小寫英文字母組成
1 <= k <= 100
fill 是一個小寫英文字母
思路
一道簡單的字符模擬題,主要就是最后一組數字需要進行判斷,是否此時已經全部添加,還是需要填充
代碼實作
class Solution {
public String[] divideString(String s, int k, char fill) {
//構建一個鏈表用來記錄 組資料
List<String> list = new ArrayList<>();
int n = s.length();
//為的是除去最后一組資料之前的每k個字符拼湊到鏈表中
for (int i = 0;i<=n-k;i+=k){
list.add(s.substring(i,i+k));
}
//到最后一組資料時進行判斷是否需要填充
if (n % k == 0)
return list.toArray(new String[0]);
else {
//需要填充就按照下述方式進行填充
StringBuilder sb = new StringBuilder();
sb.append(s.substring(n - n%k,n));
for (int i = n%k;i<k;i++){
sb.append(fill);
}
list.add(sb.toString());
return list.toArray(new String[0]);
}
}
}
執行結果

T2.5194. 得到目標值的最少行動次數
題目
你正在玩一個整數游戲,從整數 1 開始,期望得到整數 target ,
在一次行動中,你可以做下述兩種操作之一:
遞增,將當前整數的值加 1(即, x = x + 1),
加倍,使當前整數的值翻倍(即,x = 2 * x),
在整個游戲程序中,你可以使用 遞增 操作 任意 次數,但是只能使用 加倍 操作 至多maxDoubles次,
給你兩個整數 target 和 maxDoubles ,回傳從1開始得到 target 需要的最少行動次數,
示例
示例1:
輸入:target = 5, maxDoubles = 0
輸出:4
解釋:一直遞增 1 直到得到 target ,
示例2:
輸入:target = 19, maxDoubles = 2
輸出:7
解釋:最初,x = 1 ,
遞增 3 次,x = 4 ,
加倍 1 次,x = 8 ,
遞增 1 次,x = 9 ,
加倍 1 次,x = 18 ,
遞增 1 次,x = 19 ,
思路
簡單遞回 / 貪心
代碼實作
class Solution {
public int minMoves(int target, int maxDoubles) {
//設定遞回終止條件
if (target == 1) return 0;
//當沒有倍增次數回傳 target-1 次
if (maxDoubles == 0) return target - 1;
//回傳 當maxDoubles不為0進行倍增計算 次數 + 1遞回計算
return target % 2 + 1 + minMoves(target / 2, maxDoubles - 1);
}
}
執行結果

T3.5982. 解決智力問題
題目
給你一個下標從 0 開始的二維整數陣列 questions ,其中 questions[i] = [pointsi, brainpoweri] ,
這個陣串列示一場考試里的一系列題目,你需要 按順序 (也就是從問題 0 開始依次解決),針對每個問題選擇解決或者跳過操作,解決問題 i 將讓你 獲得 pointsi 的分數,但是你將 無法 解決接下來的brainpoweri個問題(即只能跳過接下來的 brainpoweri 個問題),如果你跳過問題 i ,你可以對下一個問題決定使用哪種操作,
比方說,給你questions = [[3, 2], [4, 3], [4, 4], [2, 5]]:
如果問題 0 被解決了, 那么你可以獲得 3 分,但你不能解決問題 1 和 2,
如果你跳過問題 0 ,且解決問題 1 ,你將獲得 4 分但是不能解決問題 2 和 3 ,
請你回傳這場考試里你能獲得的最高分數,
示例
示例1:
輸入:questions = [[3,2],[4,3],[4,4],[2,5]]
輸出:5
解釋:解決問題 0 和 3 得到最高分,
- 解決問題 0 :獲得 3 分,但接下來 2 個問題都不能解決,
- 不能解決問題 1 和 2
- 解決問題 3 :獲得 2 分
總得分為:3 + 2 = 5 ,沒有別的辦法獲得 5 分或者多于 5 分,
提示
1 <= questions.length <= 10^5
questions[i].length == 2
1 <= pointsi, brainpoweri <= 10^5
思路
簡單的dp問題,但是我卻想歪邊界了,感覺是我智力有問題,
動態規劃的難點在于找到動態轉化方程,但是此題已經基本在題中給你了,所以直接動手就好啦,
代碼實作
class Solution {
public long mostPoints(int[][] questions) {
int n = questions.length;
long dp [] = new long[n+1];
//倒序dp 存盤的是當前位置可獲得的最大分數
for (int i = n-1;i>=0;i--){
//如果做了當前題 需要調過 questions[i][1]道題 判斷范圍 如果當前位置+跳過的題>邊界,那么選它的話后面的都不能選,最高分為questions[i][0] 反之后面還能選擇
if (i + questions[i][1] + 1< n){
dp[i] = Math.max(dp[i+1],dp[i+questions[i][1]+1]+questions[i][0]);
}else dp[i] = Math.max(dp[i+1],questions[i][0]);
}
return dp[0];
}
}
執行結果

寫在最后
小付打卡的第一場周賽 2022-01-16
因為最后一題 一般沒時間做到那里 自知自身能力有限
盡可能把會做的題 都做好 就可以了
本次周賽 對了兩道 第三道一開始小付是正序dp被邊界直接自斃
所以還是很不錯的周賽體驗
最后
每天進步點 每天識訓點
愿諸君 事業有成 學有所獲
如果覺得不錯 別忘啦一鍵三連哦~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413631.html
標籤:其他
上一篇:【游戲開發探究】Unity Addressables資源管理方式用起來太爽了,資源打包、加載、熱更變得如此輕松(Addressable Asset System | 簡稱AA)
下一篇:猜數字小游戲and關機程式
