给定一个整数数组 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)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live