📌  相关文章
📜  找出所有元素都是自传数的最大子数组的长度

📅  最后修改于: 2021-09-04 13:08:12             🧑  作者: Mango

给定一个整数数组 arr[] ,我们的任务是找到最大子数组的长度,使得子数组的所有元素都是自传数。

例子:

方法:
要解决上述问题,我们必须按照以下步骤操作:

  • 从索引 0 开始遍历数组,并用 0 初始化max_lengthcurrent_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