Untitled
unknown
c_cpp
7 months ago
1.1 kB
12
Indexable
int getMinimumAlterations(string server_health) {
int n = server_health.size();
if (n < 3) return 0;
// Case 1: all 0s or all 1s
int count0 = 0, count1 = 0;
for (char c : server_health) {
if (c == '0') count0++;
else count1++;
}
int min_flips = min(count0, count1);
// Case 2: 0s followed by 1s
vector<int> prefix0(n + 1, 0), prefix1(n + 1, 0);
for (int i = 0; i < n; ++i) {
prefix0[i + 1] = prefix0[i] + (server_health[i] == '0' ? 0 : 1);
prefix1[i + 1] = prefix1[i] + (server_health[i] == '1' ? 0 : 1);
}
// For 0s followed by 1s: find the best split point i where 0..i are 0s and i+1..n-1 are 1s
for (int i = 0; i <= n; ++i) {
int flips = prefix0[i] + (prefix1[n] - prefix1[i]);
if (flips < min_flips) {
min_flips = flips;
}
}
// Case 3: 1s followed by 0s
for (int i = 0; i <= n; ++i) {
int flips = prefix1[i] + (prefix0[n] - prefix0[i]);
if (flips < min_flips) {
min_flips = flips;
}
}
return min_flips;
}Editor is loading...
Leave a Comment