【发布时间】:2016-11-02 09:04:19
【问题描述】:
给定一个二进制数,找出通过翻转一位(1 或 0)可以获得的最大连续 1 或 0
给出的代码是
public int getMacCon(string[] A)
{
int n = A.Length;
int result = 0;
for (int i = 0; i < n - 1; i++)
{
if (A[i] == A[i + 1])
result = result + 1;
}
int r = -2;
for (int i = 0; i < n; i++)
{
int count = 0;
if (i > 0)
{
if (A[i - 1] != A[i])
count = count + 1;
else
count = count - 1;
}
if (i < n - 1)
{
if (A[i + 1] != A[i])
count = count + 1;
else
count = count - 1;
}
r = Math.Max(r, count);
}
return result + r;
}
我很难弄清楚这里的逻辑。特别是下面给出的部分
for (int i = 0; i < n - 1; i++)
{
if (A[i] == A[i + 1])
result = result + 1;
}
如果有人可以向我解释此解决方案中的逻辑,我将不胜感激。 谢谢
【问题讨论】:
-
顺便说一句,显示的代码对长度为 0、1 或 2 的字符串给出了错误的答案;应该有
switch(n) { case 0: case 1: return 0; case 2: return A[0]==A[1] ? 0 : 2; } -
最后的话;如果是我,我会在这里重命名很多东西:
result=>currentConcurrentCount,count=>delta,r=>maxDelta,A=>values -
我想知道我是否误解了什么,但我无法让这段代码返回正确的答案,哈哈。 “110110000”我得到 7; 4 代表“11011”;和 3 代表“1101”。
标签: c# algorithm math numbers number-theory