📜  元素可被k整除的最长子数组

📅  最后修改于: 2021-04-24 22:47:57             🧑  作者: Mango

假设给定一个数组。您必须找到最长子数组的长度,以使它的每个元素都可以被k整除。

例子:

Input : arr[] = { 1, 7, 2, 6, 8, 100, 3, 6, 16}, k=2
Output : 4

Input : arr[] = { 3, 11, 22, 32, 55, 100, 1, 5}, k=5
Output : 2

方法:

  • 用值0初始化两个变量current_count和max_count;
  • 从左到右迭代数组,并用k检查每个元素的可除性。
  • 如果元素是可分割的,则增加current_count,否则使current_count等于0
  • 将current_count与每个元素上的max_count进行比较,如果current_count大于max_count,则将current_count的值分配给max_count
  • 最后,max_count的输出值

下面是上述方法的实现:

C++
// C++ program of above approach
#include 
using namespace std;
  
// function to find longest subarray
int longestsubarray(int arr[], int n, int k)
{
    int current_count = 0;
    // this will contain length of longest subarray found
    int max_count = 0;
  
    for (int i = 0; i < n; i++) {
        if (arr[i] % k == 0)
            current_count++;
        else
            current_count = 0;
        max_count = max(current_count, max_count);
    }
    return max_count;
}
  
// Driver code
int main()
{
    int arr[] = { 2, 5, 11, 32, 64, 88 };
    int n = sizeof(arr) / sizeof(arr[0]);
    int k = 8;
    cout << longestsubarray(arr, n, k);
    return 0;
}


Java
//Java program of above approach
  
import java.io.*;
  
class GFG {
    // function to find longest subarray
static int longestsubarray(int arr[], 
                        int n, int k)
{
    int current_count = 0;
      
    // this will contain length of 
    // longest subarray found
    int max_count = 0;
  
    for (int i = 0; i < n; i++) 
    {
        if (arr[i] % k == 0)
            current_count++;
        else
            current_count = 0;
        max_count = Math.max(current_count, 
                            max_count);
    }
    return max_count;
}
  
// Driver code
    public static void main (String[] args) {
int arr[] = { 2, 5, 11, 32, 64, 88 };
    int n = arr.length;
    int k = 8;
    System.out.println(longestsubarray(arr, n, k));
}
}
  
// This code is contributed 
// by ajit


Python3
# Python 3 program of above approach
  
# function to find longest subarray
def longestsubarray(arr, n, k):
    current_count = 0
      
    # this will contain length of 
    # longest subarray found
    max_count = 0
  
    for i in range(0, n, 1):
        if (arr[i] % k == 0):
            current_count += 1
        else:
            current_count = 0
        max_count = max(current_count, 
                            max_count)
      
    return max_count
  
# Driver code
if __name__ == '__main__':
    arr = [2, 5, 11, 32, 64, 88]     
    n = len(arr)
    k = 8
    print(longestsubarray(arr, n, k))
  
# This code is contributed by
# Surendra_Gangwar


C#
// C# program of above approach
using System;
  
class GFG
{
// function to find longest subarray
static int longestsubarray(int[] arr, 
                           int n, int k)
{
    int current_count = 0;
      
    // this will contain length of 
    // longest subarray found
    int max_count = 0;
  
    for (int i = 0; i < n; i++) 
    {
        if (arr[i] % k == 0)
            current_count++;
        else
            current_count = 0;
        max_count = Math.Max(current_count, 
                             max_count);
    }
    return max_count;
}
  
// Driver code
public static void Main()
{
    int[] arr = { 2, 5, 11, 32, 64, 88 };
    int n = arr.Length;
    int k = 8;
    Console.Write(longestsubarray(arr, n, k));
}
}
  
// This code is contributed 
// by Akanksha Rai


PHP


输出:

3