生活随笔
收集整理的這篇文章主要介紹了
LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 1. 比賽結(jié)果
- 2. 題目
- 1. LeetCode LCP 17. 速算機器人 easy
- 2. LeetCode LCP 18. 早餐組合 easy
- 3. LeetCode LCP 19. 秋葉收藏集 medium
- 4. LeetCode LCP 20. 快速公交 hard
- 5. LeetCode LCP 21. 追逐游戲 hard
1. 比賽結(jié)果
做出來2題,第三題寫了好長時間無果。還是實力太差了,繼續(xù)加油!
有提交成功的選手 3244 人,排 656 名
前幾名大佬太強了!
2. 題目
1. LeetCode LCP 17. 速算機器人 easy
題目鏈接
小扣在秋日市集發(fā)現(xiàn)了一款速算機器人。店家對機器人說出兩個數(shù)字(記作 x 和 y),請小扣說出計算指令:
“A” 運算:使 x = 2 * x + y;
“B” 運算:使 y = 2 * y + x。
在本次游戲中,店家說出的數(shù)字為 x = 1 和 y = 0,小扣說出的計算指令記作僅由大寫字母 A、B 組成的字符串 s,字符串中字符的順序表示計算順序,請返回最終 x 與 y 的和為多少。
示例
1:
輸入:s
= "AB"
輸出:
4
解釋:
經(jīng)過一次 A 運算后,x
= 2, y
= 0。
再經(jīng)過一次 B 運算,x
= 2, y
= 2。
最終 x 與 y 之和為
4。提示:
0 <= s
.length
<= 10
s 由
'A' 和
'B' 組成
解題:
class Solution {
public:int calculate(string s
) {int x
= 1, y
= 0;for(char c
: s
) {if(c
== 'A')x
= x
*2+y
;elsey
= y
*2+x
;}return x
+y
;}
};
2. LeetCode LCP 18. 早餐組合 easy
題目鏈接
小扣在秋日市集選擇了一家早餐攤位,一維整型數(shù)組 staple 中記錄了每種主食的價格,一維整型數(shù)組 drinks 中記錄了每種飲料的價格。
小扣的計劃選擇一份主食和一款飲料,且花費不超過 x 元。
請返回小扣共有多少種購買方案。
注意:答案需要以 1e9 + 7 (1000000007) 為底取模,
如:計算初始結(jié)果為:1000000008,請返回 1
示例
1:
輸入:staple
= [10,20,5], drinks
= [5,5,2], x
= 15
輸出:
6
解釋:小扣有
6 種購買方案,所選主食與所選飲料在數(shù)組中對應的下標分別是:
第
1 種方案:staple
[0] + drinks
[0] = 10 + 5 = 15;
第
2 種方案:staple
[0] + drinks
[1] = 10 + 5 = 15;
第
3 種方案:staple
[0] + drinks
[2] = 10 + 2 = 12;
第
4 種方案:staple
[2] + drinks
[0] = 5 + 5 = 10;
第
5 種方案:staple
[2] + drinks
[1] = 5 + 5 = 10;
第
6 種方案:staple
[2] + drinks
[2] = 5 + 2 = 7。示例
2:
輸入:staple
= [2,1,1], drinks
= [8,9,5,1], x
= 9
輸出:
8
解釋:小扣有
8 種購買方案,所選主食與所選飲料在數(shù)組中對應的下標分別是:
第
1 種方案:staple
[0] + drinks
[2] = 2 + 5 = 7;
第
2 種方案:staple
[0] + drinks
[3] = 2 + 1 = 3;
第
3 種方案:staple
[1] + drinks
[0] = 1 + 8 = 9;
第
4 種方案:staple
[1] + drinks
[2] = 1 + 5 = 6;
第
5 種方案:staple
[1] + drinks
[3] = 1 + 1 = 2;
第
6 種方案:staple
[2] + drinks
[0] = 1 + 8 = 9;
第
7 種方案:staple
[2] + drinks
[2] = 1 + 5 = 6;
第
8 種方案:staple
[2] + drinks
[3] = 1 + 1 = 2;提示:
1 <= staple
.length
<= 10^5
1 <= drinks
.length
<= 10^5
1 <= staple
[i
],drinks
[i
] <= 10^5
1 <= x
<= 2*10^5
解題:
- 對一個數(shù)組A排序,遍歷另一個數(shù)組B,在A中二分查找
class Solution {
public:int breakfastNumber(vector
<int>& staple
, vector
<int>& drinks
, int x
) {sort(drinks
.begin(), drinks
.end());long long ans
= 0, mod
= 1e9+7;for(int stp
: staple
) {if(stp
>= x
)continue;int target
= x
- stp
;int pos
= bs(drinks
, target
);if(pos
!= -1){ans
= (ans
+pos
+1)%mod
;}}return ans
;}int bs(vector
<int>& arr
, int target
){int l
= 0, r
= arr
.size()-1, n
= arr
.size(), mid
;while(l
<= r
) {mid
= (l
+ r
) / 2;if(arr
[mid
] > target
){r
= mid
-1;}else{if(mid
== n
-1 || arr
[mid
+1] > target
)return mid
;elsel
= mid
+1;}}return -1;}
};
1164 ms 146.5 MB
class Solution {
public:int breakfastNumber(vector
<int>& staple
, vector
<int>& drinks
, int x
) {sort(staple
.begin(), staple
.end());sort(drinks
.begin(), drinks
.end());long long ans
= 0, mod
= 1e9+7;int m
= staple
.size(), n
= drinks
.size(), i
, j
;i
= 0, j
= n
-1;while(i
< m
&& j
>= 0){if(staple
[i
]+drinks
[j
] <= x
){ans
= (ans
+j
+1)%mod
;i
++;}elsej
--;}return ans
;}
};
1368 ms 146.4 MB
3. LeetCode LCP 19. 秋葉收藏集 medium
題目鏈接
小扣出去秋游,途中收集了一些紅葉和黃葉,他利用這些葉子初步整理了一份秋葉收藏集 leaves, 字符串 leaves 僅包含小寫字符 r 和 y, 其中字符 r 表示一片紅葉,字符 y 表示一片黃葉。
出于美觀整齊的考慮,小扣想要將收藏集中樹葉的排列調(diào)整成「紅、黃、紅」三部分。每部分樹葉數(shù)量可以不相等,但均需大于等于 1。
每次調(diào)整操作,小扣可以將一片紅葉替換成黃葉或者將一片黃葉替換成紅葉。
請問小扣最少需要多少次調(diào)整操作才能將秋葉收藏集調(diào)整完畢。
示例
1:
輸入:leaves
= "rrryyyrryyyrr"
輸出:
2
解釋:調(diào)整兩次,將中間的兩片紅葉替換成黃葉,得到
"rrryyyyyyyyrr"示例
2:
輸入:leaves
= "ryr"
輸出:
0
解釋:已符合要求,不需要額外操作提示:
3 <= leaves
.length
<= 10^5
leaves 中只包含字符
'r' 和字符
'y'
解題:
-
參考IK大佬的DP
-
dp[i][0] 是表示到 i 結(jié)束時全是 紅色R的最少操作次數(shù)
-
dp[i][1] 是表示到 i 結(jié)束時形成 RY 的最少操作次數(shù)
-
dp[i][2] 是表示到 i 結(jié)束時形成 RYR 的最少操作次數(shù)
class Solution {
public:int minimumOperations(string leaves
) {int n
= leaves
.size(), i
;vector
<vector
<int>> dp(n
, vector
<int>(3, INT_MAX
));if(leaves
[0]=='r')dp
[0][0] = 0;elsedp
[0][0] = 1;if(leaves
[1]=='y'){dp
[1][0] = dp
[0][0]+1;dp
[1][1] = dp
[0][0];}else{dp
[1][0] = dp
[0][0];dp
[1][1] = dp
[0][0]+1;}if(leaves
[2]=='r'){dp
[2][0] = dp
[1][0];dp
[2][1] = min(dp
[1][0]+1, dp
[1][1]+1);dp
[2][2] = dp
[1][1];}else{dp
[2][0] = dp
[1][0]+1;dp
[2][1] = min(dp
[1][0], dp
[1][1]);dp
[2][2] = dp
[1][1]+1;}for(i
= 3; i
< n
; i
++) {if(leaves
[i
] == 'r'){dp
[i
][0] = dp
[i
-1][0];dp
[i
][1] = min(dp
[i
-1][0]+1, dp
[i
-1][1]+1);dp
[i
][2] = min(dp
[i
-1][1], dp
[i
-1][2]);}else{dp
[i
][0] = dp
[i
-1][0]+1;dp
[i
][1] = min(dp
[i
-1][1],dp
[i
-1][0]);dp
[i
][2] = min(dp
[i
-1][1]+1, dp
[i
-1][2]+1);}}return dp
[n
-1][2];}
};
704 ms 114.4 MB
4. LeetCode LCP 20. 快速公交 hard
題目鏈接
解題:
5. LeetCode LCP 21. 追逐游戲 hard
題目鏈接
解題:
我的CSDN博客地址 https://michael.blog.csdn.net/
長按或掃碼關注我的公眾號(Michael阿明),一起加油、一起學習進步!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 2020 力扣杯全国秋季编程大赛(656/3244,前20.2%)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。