【问题标题】:Sequence with largest size of subsequence having each element as same具有每个元素相同的最大子序列大小的序列
【发布时间】:2019-04-08 00:22:27
【问题描述】:

我想找出每个元素都等于 5 的最大连续子序列。

我尝试为此编写代码,但找不到正确的方法

示例 -> 如果序列类似于 5 5 1 0 93 43 5 5 5 5 21 答案将是 4,因为数组中存在 4 个连续的 5。 附言- 我是一个坚持它的新手。

int large(int a[],int n)
{
    int i=0,j=0,sublen=0;
    while(i<n)
    {
        if(a[i]==1)
        {
            sublen++;
            for(int j=i+1;j<n;j++)
            {
                if(a[j]==1)
                {
                    sublen++;
                }
                else
                {
                    i=j+1;
                    continue;
                }
            }
        }   
        else
        {
            i++;
        }
   }
   return sublen;
}

【问题讨论】:

    标签: c++ algorithm search sequence


    【解决方案1】:

    您可以简单地遍历序列,当您看到 5 时增加一个计数器,否则将计数器重置为 0。当您增加计数器时,测试它是否是迄今为止它所持有的最大值。最后返回最大值。

    类似:

    int large(const int *a, int n)
    {
        int sublen = 0, counter = 0;
    
        for (int i = 0; i < n; ++i) {
            if (a[i] == 5) { // found a 5
                ++counter;
                if (sublen < counter) { // test for largest value so far
                    sublen = counter;
                }
            } else { // not a 5
                counter = 0;
            }
        }
        return sublen;
    }
    

    【讨论】:

    • 是他们的任何其他最佳方式,因为它不适合在大型阵列上操作@Blastfurnace
    • @Muskan 如果到目前为止找到的最大序列大于剩余要测试的元素数,但算法仍然是 O(n),您可以提前退出。
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多