给定整数数组arr [] ,我们的任务是找到最大子数组的长度,以使子数组的所有元素均为自传编号。
An Autobiographical Number is a number such that the first digit of it counts how many zeroes are there in it, the second digit counts how many ones are there and so on.
For example, 21200 has 2 zero, 1 one, 2 two and 0 three and 0 four.
例子:
Input: arr[]={21200, 1, 1303, 1210, 2020}
Output: 2
Explanation:
Maximum length of subarray with all numbers as Autobiographical Number is {1210, 2020}.
Input: arr[]={100, 200, 300, 400, 1200, 500}
Output: 0
Explanation:
None of them are Autobiographical Number.
方法:
为了解决上述问题,我们必须遵循以下步骤:
- 从索引0遍历数组,并使用0初始化max_length和current_length变量。
- 如果当前元素是自传数字,则增加current_length变量并继续,否则将current_length设置为0。
- 在每个步骤中,将max_length分配为max_length = max(current_length,max_length)。 max_length的最终值将存储所需的结果。
下面是上述方法的实现:
C++
// C++ program to find the length of the
// largest subarray whose every element is an
// Autobiographical Number
#include
using namespace std;
// function to check number is autobiographical
bool isAutoBiographyNum(int number)
{
int count = 0, position, size, digit;
string NUM;
// Convert integer to string
NUM = to_string(number);
size = NUM.length();
// Iterate for every digit to check
// for their total count
for (int i = 0; i < size; i++) {
position = NUM[i] - '0';
count = 0;
// Check occurrence of every number
// and count them
for (int j = 0; j < size; j++) {
digit = NUM[j] - '0';
if (digit == i)
count++;
}
// Check if any position mismatches with
// total count them return with false
// else continue with loop
if (position != count)
return false;
}
return true;
}
// Function to return the length of the
// largest subarray whose every
// element is a Autobiographical number
int checkArray(int arr[], int n)
{
int current_length = 0;
int max_length = 0;
// Utility function which checks every element
// of array for Autobiographical number
for (int i = 0; i < n; i++) {
// Check if element arr[i] is an
// Autobiographical number
if (isAutoBiographyNum(arr[i]))
// Increment the current length
current_length++;
else
current_length = 0;
// Update max_length value
max_length = max(max_length, current_length);
}
// Return the final result
return max_length;
}
// Driver code
int main()
{
int arr[] = { 21200, 1, 1303, 1210, 2020 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << checkArray(arr, n) << "\n";
return 0;
}
Java
// Java program to find the length of the
// largest subarray whose every element is
// an autobiographical number
class GFG {
// Function to check number is autobiographical
static boolean isAutoBiographyNum(int number)
{
int count = 0, position, size, digit;
String NUM;
// Convert integer to string
NUM = Integer.toString(number);
size = NUM.length();
// Iterate for every digit to check
// for their total count
for(int i = 0; i < size; i++)
{
position = NUM.charAt(i) - '0';
count = 0;
// Check occurrence of every number
// and count them
for(int j = 0; j < size; j++)
{
digit = NUM.charAt(j) - '0';
if (digit == i)
count++;
}
// Check if any position mismatches with
// total count them return with false
// else continue with loop
if (position != count)
return false;
}
return true;
}
// Function to return the length of the
// largest subarray whose every
// element is a Autobiographical number
static int checkArray(int arr[], int n)
{
int current_length = 0;
int max_length = 0;
// Utility function which checks every element
// of array for autobiographical number
for(int i = 0; i < n; i++)
{
// Check if element arr[i] is an
// autobiographical number
if (isAutoBiographyNum(arr[i]) == true)
{
// Increment the current length
current_length++;
}
else
{
current_length = 0;
}
// Update max_length value
max_length = Math.max(max_length, current_length);
}
// Return the final result
return max_length;
}
// Driver code
public static void main (String[] args)
{
int arr[] = { 21200, 1, 1303, 1210, 2020 };
int n = arr.length;
System.out.println(checkArray(arr, n));
}
}
// This code is contributed by AnkitRai01
Python3
# Python3 program to find the length of the
# largest subarray whose every element is an
# autobiographical number
# Function to check number is autobiographical
def isAutoBiographyNum(number):
count = 0;
# Convert integer to string
NUM = str(number);
size = len(NUM);
# Iterate for every digit to check
# for their total count
for i in range(size):
position = ord(NUM[i]) - ord('0');
count = 0;
# Check occurrence of every number
# and count them
for j in range(size):
digit = ord(NUM[j]) - ord('0');
if (digit == i):
count += 1;
# Check if any position mismatches with
# total count them return with false
# else continue with loop
if (position != count):
return False;
return True;
# Function to return the length of the
# largest subarray whose every
# element is a autobiographical number
def checkArray(arr, n):
current_length = 0;
max_length = 0;
# Utility function which checks every element
# of array for autobiographical number
for i in range(n):
# Check if element arr[i] is an
# autobiographical number
if (isAutoBiographyNum(arr[i])):
# Increment the current length
current_length += 1;
else:
current_length = 0;
# Update max_length value
max_length = max(max_length,
current_length);
# Return the final result
return max_length;
# Driver code
if __name__ == "__main__":
arr = [ 21200, 1, 1303, 1210, 2020 ];
n = len(arr);
print(checkArray(arr, n));
# This code is contributed by AnkitRai01
C#
// C# program to find the length of the
// largest subarray whose every element
// is an autobiographical number
using System;
class GFG {
// Function to check number is autobiographical
static bool isAutoBiographyNum(int number)
{
int count = 0, position, size, digit;
string NUM;
// Convert integer to string
NUM = number.ToString();
size = NUM.Length;
// Iterate for every digit to check
// for their total count
for(int i = 0; i < size; i++)
{
position = NUM[i] - '0';
count = 0;
// Check occurrence of every number
// and count them
for(int j = 0; j < size; j++)
{
digit = NUM[j] - '0';
if (digit == i)
count++;
}
// Check if any position mismatches
// with total count them return with
// false else continue with loop
if (position != count)
return false;
}
return true;
}
// Function to return the length of the
// largest subarray whose every element
// is a autobiographical number
static int checkArray(int []arr, int n)
{
int current_length = 0;
int max_length = 0;
// Utility function which checks every element
// of array for autobiographical number
for(int i = 0; i < n; i++)
{
// Check if element arr[i] is an
// autobiographical number
if (isAutoBiographyNum(arr[i]) == true)
{
// Increment the current length
current_length++;
}
else
{
current_length = 0;
}
// Update max_length value
max_length = Math.Max(max_length,
current_length);
}
// Return the final result
return max_length;
}
// Driver code
public static void Main (string[] args)
{
int []arr = { 21200, 1, 1303, 1210, 2020 };
int n = arr.Length;
Console.WriteLine(checkArray(arr, n));
}
}
// This code is contributed by AnkitRai01
Javascript
输出:
2
时间复杂度: O(n * log n)