classSolution { public: string getSmallestString(string s, int K){ // 计算第 a 个字母到第 b 个字母的距离 auto dis = [&](int a, int b) { returnmin((a - b + 26) % 26, (b - a + 26) % 26); }; int n = s.size(); string t; // 从第一个位置开始填,每个位置尽可能填入最小的字符 for (int i = 0; i < n; i++) for (int j = 0; j < 26; j++) { int d = dis(j, s[i] - 'a'); if (K >= d) { // 填入当前字符之后,距离不超出 K,直接填入 K -= d; t.push_back(j + 'a'); break; } } return t; } };
C
两边排序修改即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
classSolution { public: longlongminOperationsToMakeMedianK(vector<int> &nums, int k){ ranges::sort(nums); longlong ans = 0; int m = nums.size() / 2; if (nums[m] > k) { for (int i = m; i >= 0 && nums[i] > k; i--) { ans += nums[i] - k; } } else { for (int i = m; i < nums.size() && nums[i] < k; i++) { ans += k - nums[i]; } } return ans; } };
D
来自 灵茶山艾府
2022 感恩勋章
由于可以讨论联通,又可以走重复边,AND 的性质是 AND
的数字越多,结果越小。最优方案是把 s
所在连通块内的边都走一遍。