文章目录
算法
1.贪心
1.分割字符问题(新手)
题目:在一个 平衡字符串 中,‘L’ 和 ‘R’ 字符的数量是相同的。
给你一个平衡字符串 s,请你将它分割成尽可能多的平衡字符串。
注意:分割得到的每个字符串都必须是平衡字符串。
返回可以通过分割得到的平衡字符串的 最大数量 。
示例:输入:s = "RLRRLLRLRL"
输出:4
解释:s 可以分割为 "RL"、"RRLL"、"RL"、"RL" ,每个子字符串中都包含相同数量的 'L' 和 'R' 。
代码:
int check(char s)
{
int abs = 0, count = 0;
for(int i = 0; i < s.size(); i++)
{
if(s[i] == 'R')count ++;
else count--;
if(count == 0)abs++;
}
return abs;
}
2.翻硬币问题(简单)
现在有一个初始状态的硬币序列,还有一个目的状态的硬币序列,分别用#和%来表示正反,每次翻硬币只能翻两个挨着的硬币,怎样在短的次数内将初始态翻到目的状态?
初始态: # % % % % # % % % % % # % % # % % % # % % %
目的态: % % % % % % % % % % % # % % % # % % # % % %
次数:5次 次数:1次
int main()
{
int sum = 0, k;
while(scanf("%s %s", a, b) != EOF)
{
int n= strlen(a);
bool flag = true;
for(int i = 0; i < n; i++)
{
if(a[i] != b[i])
{
if(flag)
{
flag = false;
k = i;
}
else
{
flag = true;
sum += i - k;
}
}
}
}
cout << sum;
}
2.排序
1.基础快速排序
数字排序
void quick_sort( int q[], int l, int r)
{
if(l >= r