我有一个1维数组,填充了40个随机元素的表(所有值都是0或1)。我想找到最长的连续值范围。
例如:
在111100101
中,最长的行为1111
,因为它有四个连续的1
值。
在011100
中,结果为111
。
我不知道如何检查“下一个元素”并检查它是0还是1。 就像第一个将是1111(计数4)但下一个将是0值,这意味着我必须停止计数。
我的想法是将此值(4)放在另一个数组(例如:111100101)中,并将1的值放回零。并重新开始这个过程。
为了找到最大的值,我已经制作了另一种方法来检查数组中记录0的1的最大值,这不是问题。
但我无法找到一种方法来填充数组tabelLdr,包含同类元素组的所有值(0或1)。
在下面的代码中,我有2个if,当然它永远不会进入第二个if(检查数组中的下一个值是否为!=到当前状态(为0或1)。
public void BerekenDeelrij(byte[] tabel, byte[] tabelLdr)
{
byte LdrNul = 0, Ldréén = 0;
//byte teller = 0;
for (byte i = 0; i < tabel.Length; i++)
{
if (tabel[i] == 0)
{
LdrNul++;
//this 2nd if cleary does not work, but i have no idea how to implend this sort of idea in my program.
if (tabel[i] == 1) //if value != 0 then the total value gets put in the second array tabelLdr,
{
tabelLdr[i] = LdrNul;
LdrNul = 0
}
}
if (tabel[i] == 1)
{
Ldréén++;
if (tabel[i] == 0)
{
tabelLdr[i] = Ldréén;
Ldréén = 0;
}
}
}/*for*/
}
答案 0 :(得分:1)
此方法应该满足您的需求:
public int LargestSequence(byte[] array) {
byte? last = null;
int count = 0;
int largest = 0;
foreach (byte b in array) {
if (last == b)
++count;
else {
largest = Math.Max(largest, count);
last = b;
count = 1;
}
}
return Math.Max(largest, count);
}
答案 1 :(得分:0)
即使i
是循环计数器,它仍然只是一个变量。有效的for
语句是for (;;)
,这是一个无限循环。请注意,for
语句会增加i
,如i++
中所示。表达式i = i + 1
也可以正常工作。
答案 2 :(得分:0)
我不确定你是否需要最长的“行”或0或1的最长行。这将适用于后者
var max = 0;
var start = 0;
var current = -1;
var count = 0;
for(int i = 0;i<table.Length;i++)
{
if(current = table[i])
{
count++;
}
else
{
current = table[i];
if(max < count)
{
max = count;
start = i-count;
}
count = 1;
}
}
if(max < count)
{
max = count;
start = i-count;
}
// max是从start开始的行的长度;