今天周賽的復盤
這題就是問說, 如果要01相間, 則最少得轉幾個數字,
我一開始弄錯題目的意思了, 所以花太多時間在這上面, 不過第三題我自己看完解答那個給我一天我也想不到
這邊我先去得出從0開始跟從1開始的兩個陣列
最後再把原陣列跟這兩個去做比較, 看誰要改得較少
class Solution {
public:
int minOperations(string s) {
if(s.size() == 0 || s.size() == 1) return 0;
int n = s.size();
string x1;
string x2;
for(int i = 0; i < n;i++){
char c1 = i% 2== 0?'0':'1';
char c2 = i% 2== 1?'0':'1';
x1 += c1;
x2 += c2;
}
int res1 = 0;
int res2 = 0;
for(int i = 0; i < n; i++){
if(x1[i] != s[i]){
res1++;
}
if(x2[i] != s[i]){
res2++;
}
}
return min(res1, res2);
}
};
但在看完討論, 意思一樣但如果是要0或1剛好會差相反的數,所以我們其實總結一邊, 在用總數減去, 取較小值就可以了
class Solution {
public:
int minOperations(string s) {
if(s.size() == 0 || s.size() == 1) return 0;
int n = s.size();
int res = 0;
for(int i = 0; i < n; i++){
if(i % 2 != s[i] - '0'){
res++;
}
}
return min(res, n - res);
}
};