📜  计数仅由一位整数组成的子数组

📅  最后修改于: 2021-05-17 19:42:49             🧑  作者: Mango

给定由N个正整数组成的数组arr [] ,任务是对仅由一位数字元素组成的子数组进行计数。

例子:

天真的方法:最简单的方法是遍历数组并生成所有可能的子数组。对于每个子数组,检查其中的所有整数是否都是一位整数。

时间复杂度: O(N 3 )
辅助空间: O(1)

高效方法:为了优化上述方法,其思想是找到连续的单个数字整数的每个块的大小,并以该长度的总子数组递增计数。请按照以下步骤解决问题:

  • 初始化一个变量,例如res = 0c = 0 ,以存储子数组的总数和子数组中一位整数的总数。
  • 遍历数组并执行以下操作:
    • 如果arr [i] <10,则将c的计数增加1,将res的计数增加c。
    • 否则,将c设置为0。
  • 最后,打印一位整数整数子数组的总数。

下面是上述方法的实现:

C++
// C++ program for the above approach
 
#include 
using namespace std;
 
// Function to count of subarrays made
// up of single digit integers only
int singleDigitSubarrayCount(int arr[],
                             int N)
{
    // Stores count of subarrays
    int res = 0;
 
    // Stores the count of consecutive
    // single digit numbers in the array
    int count = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++) {
 
        if (arr[i] <= 9) {
 
            // Increment size of block by 1
            count++;
 
            // Increment res by count
            res += count;
        }
 
        else {
 
            // Assign count = 0
            count = 0;
        }
    }
 
    cout << res;
}
 
// Driver Code
int main()
{
    // Given array
    int arr[] = { 0, 1, 14, 2, 5 };
 
    // Size of the array
    int N = sizeof(arr) / sizeof(arr[0]);
    singleDigitSubarrayCount(arr, N);
 
    return 0;
}


Java
// Java program for the above approach
class GFG
{
 
// Function to count of subarrays made
// up of single digit integers only
static void singleDigitSubarrayCount(int arr[],
                             int N)
{
   
    // Stores count of subarrays
    int res = 0;
 
    // Stores the count of consecutive
    // single digit numbers in the array
    int count = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
        if (arr[i] <= 9)
        {
 
            // Increment size of block by 1
            count++;
 
            // Increment res by count
            res += count;
        }
 
        else
        {
 
            // Assign count = 0
            count = 0;
        }
    }
    System.out.print(res);
}
 
// Driver Code
public static void main(String[] args)
{
   
    // Given array
    int arr[] = { 0, 1, 14, 2, 5 };
 
    // Size of the array
    int N = arr.length;
    singleDigitSubarrayCount(arr, N);
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program for the above approach
 
# Function to count of subarrays made
# up of single digit integers only
def singleDigitSubarrayCount(arr, N):
     
    # Stores count of subarrays
    res = 0
 
    # Stores the count of consecutive
    # single digit numbers in the array
    count = 0
 
    # Traverse the array
    for i in range(N):
        if (arr[i] <= 9):
 
            # Increment size of block by 1
            count += 1
 
            # Increment res by count
            res += count
        else:
            # Assign count = 0
            count = 0
    print (res)
 
# Driver Code
if __name__ == '__main__':
   
    # Given array
    arr = [0, 1, 14, 2, 5]
 
    # Size of the array
    N = len(arr)
    singleDigitSubarrayCount(arr, N)
 
    # This code is contributed by mohit kumar 29.


C#
// C# program for the above approach
using System;
class GFG{
 
// Function to count of subarrays made
// up of single digit integers only
static void singleDigitSubarrayCount(int[] arr,
                             int N)
{
   
    // Stores count of subarrays
    int res = 0;
 
    // Stores the count of consecutive
    // single digit numbers in the array
    int count = 0;
 
    // Traverse the array
    for (int i = 0; i < N; i++)
    {
        if (arr[i] <= 9)
        {
 
            // Increment size of block by 1
            count++;
 
            // Increment res by count
            res += count;
        }
        else
        {
 
            // Assign count = 0
            count = 0;
        }
    }
    Console.Write(res);
}
 
// Driver Code
public static void Main(string[] args)
{
    // Given array
    int[] arr = { 0, 1, 14, 2, 5 };
 
    // Size of the array
    int N = arr.Length;
    singleDigitSubarrayCount(arr, N);
}
}
 
// This code is contributed by sanjoy_62.


Javascript


输出:
6

时间复杂度: O(N)
辅助空间: O(1)