【发布时间】:2015-07-01 19:56:43
【问题描述】:
如何找到可以分成两部分的二进制数组的最长切片:在左边,0应该是leader;在正确的部分,1 应该是领导者? 例如 : [1,1,0,1,0,0,1,1] 应该返回 7 以便第一部分是 [1,0,1,0,0] 而第二部分是 [1,1]
我尝试了以下解决方案,它在某些测试用例中成功,但我认为它效率不高:
public static int solution(int[] A)
{
int length = A.Length;
if (length <2|| length>100000)
return 0;
if (length == 2 && A[0] != A[1])
return 0;
if (length == 2 && A[0] == A[1])
return 2;
int zerosCount = 0;
int OnesCount = 0;
int start = 0;
int end = 0;
int count=0;
//left hand side
for (int i = 0; i < length; i++)
{
end = i;
if (A[i] == 0)
zerosCount++;
if (A[i] == 1)
OnesCount++;
count = i;
if (zerosCount == OnesCount )
{
start++;
break;
}
}
int zeros = 0;
int ones = 0;
//right hand side
for (int j = end+1; j < length; j++)
{
count++;
if (A[j] == 0)
zeros++;
if (A[j] == 1)
ones++;
if (zeros == ones)
{
end--;
break;
}
}
return count;
}
【问题讨论】:
-
通过编码,你尝试过什么?
标签: algorithm