class Solution {
public:
long long minimumSteps(string s) {
}
};
2938. 区分黑球与白球
桌子上有 n
个球,每个球的颜色不是黑色,就是白色。
给你一个长度为 n
、下标从 0 开始的二进制字符串 s
,其中 1
和 0
分别代表黑色和白色的球。
在每一步中,你可以选择两个相邻的球并交换它们。
返回「将所有黑色球都移到右侧,所有白色球都移到左侧所需的 最小步数」。
示例 1:
输入:s = "101" 输出:1 解释:我们可以按以下方式将所有黑色球移到右侧: - 交换 s[0] 和 s[1],s = "011"。 最开始,1 没有都在右侧,需要至少 1 步将其移到右侧。
示例 2:
输入:s = "100" 输出:2 解释:我们可以按以下方式将所有黑色球移到右侧: - 交换 s[0] 和 s[1],s = "010"。 - 交换 s[1] 和 s[2],s = "001"。 可以证明所需的最小步数为 2 。
示例 3:
输入:s = "0111" 输出:0 解释:所有黑色球都已经在右侧。
提示:
1 <= n == s.length <= 105
s[i]
不是 '0'
,就是 '1'
。原站题解
php 解法, 执行用时: 66 ms, 内存消耗: 25.2 MB, 提交时间: 2024-06-06 09:55:50
class Solution { /** * @param String $s * @return Integer */ function minimumSteps($s) { $ans = 0; $cnt1 = 0; foreach ( str_split($s) as $c ) { if ( $c == '1' ) { $cnt1++; } else { $ans += $cnt1; } } return $ans; } }
rust 解法, 执行用时: 0 ms, 内存消耗: 2.3 MB, 提交时间: 2024-06-06 09:54:13
impl Solution { pub fn minimum_steps(s: String) -> i64 { let mut ans = 0i64; let mut cnt1 = 0; for c in s.bytes() { if c == b'1' { cnt1 += 1; } else { ans += cnt1; } } ans } }
javascript 解法, 执行用时: 93 ms, 内存消耗: 54.5 MB, 提交时间: 2024-06-06 09:53:58
/** * @param {string} s * @return {number} */ var minimumSteps = function(s) { let ans = 0; let cnt1 = 0; for (const c of s) { if (c === '1') { cnt1++; } else { ans += cnt1; } } return ans; };
golang 解法, 执行用时: 8 ms, 内存消耗: 6.2 MB, 提交时间: 2023-11-21 21:44:17
func minimumSteps(s string) (ans int64) { cnt1 := 0 for _, c := range s { if c == '1' { cnt1++ } else { ans += int64(cnt1) } } return }
java 解法, 执行用时: 8 ms, 内存消耗: 43.6 MB, 提交时间: 2023-11-21 21:43:55
class Solution { public long minimumSteps(String s) { long ans = 0; int cnt1 = 0; for (char c : s.toCharArray()) { if (c == '1') { cnt1++; } else { ans += cnt1; } } return ans; } }
cpp 解法, 执行用时: 28 ms, 内存消耗: 13.2 MB, 提交时间: 2023-11-21 21:43:35
class Solution { public: long long minimumSteps(string s) { long long ans = 0; int cnt1 = 0; for (char c : s) { if (c == '1') { cnt1++; } else { ans += cnt1; } } return ans; } };
python3 解法, 执行用时: 108 ms, 内存消耗: 16.5 MB, 提交时间: 2023-11-21 21:42:35
''' 思路类似冒泡排序,毕竟这题就是把 s 排序。 对于每个 0,它左边有多少个 1,就移动多少次。 所以一边遍历 s,一边统计 1 的个数 cnt1,遇到 0 就把 cnt1 加入答案。 ''' class Solution: def minimumSteps(self, s: str) -> int: ans = cnt1 = 0 for c in s: if c == '1': cnt1 += 1 else: ans += cnt1 return ans