mirror of
https://gitlab.com/game-loader/hugo.git
synced 2025-04-19 21:42:07 +08:00
leetcode update
This commit is contained in:
parent
ab244c4817
commit
d85bfc486c
@ -15634,3 +15634,44 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
## day231 2024-10-15
|
||||
### 2938. Separate Black and White Balls
|
||||
There are n balls on a table, each ball has a color black or white.
|
||||
|
||||
You are given a 0-indexed binary string s of length n, where 1 and 0 represent black and white balls, respectively.
|
||||
|
||||
In each step, you can choose two adjacent balls and swap them.
|
||||
|
||||
Return the minimum number of steps to group all the black balls to the right and all the white balls to the left.
|
||||
|
||||

|
||||
|
||||
### 题解
|
||||
本题起初想到可以遍历一遍数组统计0的个数,再遍历数组将前面的1和后面的0交换直到到达0的个数的位置。但这样好像麻烦了一些,统计0的个数其实没有必要,直接使用双指针,分别从首尾开始遍历数组,尾指针遇到的0和首指针遇到的1交换,直到两个指针相遇即可。原因在于尾指针每次遇到0就将其和1交换,则尾指针指向位置之后的数组可以确保是全1的,同理首指针之前的数组可以确保是全0的。二者相遇时相遇位置之后的数组为全1,之前的为全0,就已经满足题目条件了。
|
||||
|
||||
遍历过程中,尾指针遇到0停下,移动首指针直到遇到1,计算二者距离并加和到结果中,继续移动尾指针直到头尾相遇结束。
|
||||
|
||||
### 代码
|
||||
```cpp
|
||||
class Solution {
|
||||
public:
|
||||
long long minimumSteps(string s) {
|
||||
long long int head = 0;
|
||||
long long int tail = s.size()-1;
|
||||
long long int result = 0;
|
||||
while (tail > head){
|
||||
while(s[tail] != '0' && tail > head){
|
||||
tail--;
|
||||
}
|
||||
while(s[head] != '1' && head < tail){
|
||||
head++;
|
||||
}
|
||||
result += tail-head;
|
||||
tail--;
|
||||
head++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user