📜  数组中最长的正整数序列

📅  最后修改于: 2022-05-13 01:57:52.171000             🧑  作者: Mango

数组中最长的正整数序列

查找数组中运行时间最长的正序列。
例子:

Input : arr[] = {1, 2, -3, 2, 3, 4, -6, 1, 
                     2, 3, 4, 5, -8, 5, 6}
Output :Index : 7, length : 5

Input : arr[] = {-3, -6, -1, -3, -8}
Output : No positive sequence detected.

一个简单的解决方案是使用两个嵌套循环。在外循环中,我们寻找积极的元素。在内循环中,我们从外循环选择的正元素开始计算正数。该解决方案的时间复杂度为 O(n^2)。
一种有效的解决方案是使用一个循环。当我们看到正整数时,我们会不断增加计数。我们在看到负数后将计数重置为 0。在重置之前,我们检查计数是否大于最大值。

C++
// CPP program to find longest running sequence
// of positive integers.
#include 
using namespace std;
 
// Prints longest sequence of positive integers in
// an array.
void getLongestSeq(int a[], int n)
{
    // Variables to keep track of maximum length and
    // starting point of maximum length. And same
    // for current length.
    int maxIdx = 0, maxLen = 0, currLen = 0, currIdx = 0;
 
    for (int k = 0; k < n; k++) {
        if (a[k] > 0) {
            currLen++;
 
            // New sequence, store
            // beginning index.
            if (currLen == 1)
                currIdx = k;           
        }
        else {
            if (currLen > maxLen) {
                maxLen = currLen;
                maxIdx = currIdx;
            }
            currLen  = 0;
        }
    }
 
    if (maxLen > 0)
        cout << "Length " << maxLen
             << ", starting index " << maxIdx << endl;   
    else
        cout << "No positive sequence detected." << endl;
     
    return;
}
 
// Driver code
int main()
{
    int arr[] = { 1, 2, -3, 2, 3, 4, -6,
               1, 2, 3, 4, 5, -8, 5, 6 };
    int n = sizeof(arr) / sizeof(int);
    getLongestSeq(arr, n);
    return 0;
}


Java
// Java program to find longest running
// sequence of positive integers
import java.io.*;
 
class GFG {
     
    // Prints longest sequence of
    // positive integers in an array.
    static void getLongestSeq(int a[], int n)
    {
        // Variables to keep track of maximum
        // length and  starting point of
        // maximum length. And same for current
        // length.
        int maxIdx = 0, maxLen = 0, currLen = 0, currIdx = 0;
     
        for (int k = 0; k < n; k++)
        {
            if (a[k] > 0)
            {
                currLen++;
     
                // New sequence, store
                // beginning index.
                if (currLen == 1)
                    currIdx = k;        
            }
            else
            {
                if (currLen > maxLen)
                {
                    maxLen = currLen;
                    maxIdx = currIdx;
                }
                currLen = 0;
            }
        }
     
        if (maxLen > 0)
        {
            System.out.print( "Length " + maxLen) ;
            System.out.print( ",starting index " + maxIdx );
        }
        else
            System.out.println("No positive sequence detected.") ;
         
        return;
    }
     
    // Driver code
    public static void main (String[] args)
    {
        int arr[] = { 1, 2, -3, 2, 3, 4, -6,
                      1, 2, 3, 4, 5, -8, 5, 6 };
        int n = arr.length;
        getLongestSeq(arr, n);
     
    }
}
 
// This article is contributed by vt_m.


Python3
# Python code to find longest running
# sequence of positive integers.
 
def getLongestSeq(a, n):
    maxIdx = 0
    maxLen = 0
    currLen = 0
    currIdx = 0
    for k in range(n):
        if a[k] > 0:
            currLen +=1
 
            # New sequence, store
            # beginning index.
            if currLen == 1:
                currIdx = k
        else:
            if currLen > maxLen:
                maxLen = currLen
                maxIdx = currIdx
            currLen = 0
             
    if maxLen > 0:
        print('Index : ',maxIdx,',Length : ',maxLen,)
    else:
        print("No positive sequence detected.")
 
# Driver code
arr = [ 1, 2, -3, 2, 3, 4, -6,
        1, 2, 3, 4, 5, -8, 5, 6]
n = len(arr)
getLongestSeq(arr, n)
 
# This code is contributed by "Abhishek Sharma 44"


C#
// C# program to find longest running
// sequence of positive integers.
using System;
 
class GFG {
     
    // Prints longest sequence of
    // positive integers in an array.
    static void getLongestSeq(int []a, int n)
    {
         
        // Variables to keep track of maximum
        // length and starting point of
        // maximum length. And same for current
        // length.
        int maxIdx = 0, maxLen = 0, currLen = 0,
            currIdx = 0;
     
        for (int k = 0; k < n; k++)
        {
            if (a[k] > 0)
            {
                currLen++;
     
                // New sequence, store
                // beginning index.
                if (currLen == 1)
                    currIdx = k;        
            }
            else
            {
                if (currLen > maxLen)
                {
                    maxLen = currLen;
                    maxIdx = currIdx;
                }
                currLen = 0;
            }
        }
     
        if (maxLen > 0)
        {
            Console.Write( "Length " + maxLen) ;
            Console.WriteLine( ",starting index "
                                      + maxIdx );
        }
        else
            Console.WriteLine("No positive sequence"
                                   + " detected.") ;
         
        return;
    }
     
    // driver code
    public static void Main()
    {
        int []arr = { 1, 2, -3, 2, 3, 4, -6,
                    1, 2, 3, 4, 5, -8, 5, 6 };
        int n = arr.Length;
        getLongestSeq(arr, n);
         
    }
 
}
// This code is contributed by Sam007


PHP
 0) {
            $currLen++;
 
            // New sequence, store
            // beginning index.
            if ($currLen == 1)
                $currIdx = $k;        
        }
        else {
            if ($currLen > $maxLen) {
                $maxLen = $currLen;
                $maxIdx = $currIdx;
            }
            $currLen = 0;
        }
    }
 
    if ($maxLen > 0)
        echo "Length " . $maxLen.
             ", starting index " .
             $maxIdx ."\n" ;
    else
        echo "No positive sequence detected."."\n";
     
    return;
}
 
    // Driver Code
    $arr = array(1, 2, -3, 2, 3, 4, -6,
                 1, 2, 3, 4, 5, -8, 5, 6);
    $n = count($arr);
    getLongestSeq($arr, $n);
     
// This code is contributed by Sam007
?>


Javascript


输出:

Length 5, starting index 7

该算法是 O(n) 时间和 O(1) 辅助空间。