计算相同元素的一维数组

时间:2010-05-23 11:31:18

标签: c#

我有一个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*/
}

3 个答案:

答案 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开始的行的长度;