假设给定一个数组。您必须找到最长子数组的长度,以使它的每个元素都可以被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