给定一个数字N和一个由K 个数字组成的数组arr[] ,任务是找到数组中以数字 N 中存在的任何数字结尾的数字的计数。
例子:
Input: N = 1731 arr[] = {57, 6786}
Output: 1
Explanation:
For 57, the last digit is 7 and since 7 is present is N, so the count is 1.
For 6786, the last digit is 6 and since 6 is not present in N, the count remains 1.
Input: N = 1324, arr[] = {23, 25, 12, 121}
Output: 3
朴素的方法:这个问题的朴素的方法是对于数组arr[]中的每个数字,检查它的最后一位数字是否等于 N 中的任何数字。增加每个这样的数字的计数并在最后打印它.
时间复杂度: O(N * K) ,其中 N 是数字,K 是数组 arr[] 中元素的数量。
高效方法:解决此问题的有效方法是执行预处理。
- 首先,创建一个大小为 10 的数组 A[]。
- 该数组充当散列,用于存储数字 N 中出现的所有数字。
- 在此之后,对于数组 arr[] 中的每个数字,提取最后一位数字并检查最后一位数字是否出现在数组中。
- 为每个这样的数字增加计数并在最后打印它。
下面是上述方法的实现:
C++
// C++ program to find the count
// of numbers in Array ending
// with digits of number N
#include
using namespace std;
// Array to keep the
// track of digits occurred
// Initially all are 0(false)
int digit[10] = { 0 };
// Function to initialize true
// if the digit is present
void digitsPresent(int n)
{
// Variable to store the last digit
int lastDigit;
// Loop to iterate through every
// digit of the number N
while (n != 0) {
lastDigit = n % 10;
// Updating the array according
// to the presence of the
// digit in n at the array index
digit[lastDigit] = true;
n /= 10;
}
}
// Function to check if the
// numbers in the array
// end with the digits of
// the number N
int checkLastDigit(int num)
{
// Variable to store the count
int count = 0;
// Variable to store the last digit
int lastDigit;
lastDigit = num % 10;
// Checking the presence of
// the last digit in N
if (digit[lastDigit] == true)
count++;
return count;
}
// Function to find
// the required count
void findCount(int N, int K, int arr[])
{
int count = 0;
for (int i = 0; i < K; i++) {
count = checkLastDigit(arr[i]) == 1
? count + 1
: count;
}
cout << count << endl;
}
// Driver code
int main()
{
int N = 1731;
// Preprocessing
digitsPresent(N);
int K = 5;
int arr[] = { 57, 6786,
1111, 3, 9812 };
findCount(N, K, arr);
return 0;
}
Java
// Java program to find the count
// of numbers in Array ending
// with digits of number N
class GFG{
// Array to keep the
// track of digits occurred
// Initially all are 0(false)
public static int[] digit = new int[10];
// Function to initialize 1(true)
// if the digit is present
public static void digitsPresent(int n)
{
// Variable to store the last digit
int lastDigit;
// Loop to iterate through every
// digit of the number N
while (n != 0)
{
lastDigit = n % 10;
// Updating the array according
// to the presence of the
// digit in n at the array index
digit[lastDigit] = 1;
n /= 10;
}
}
// Function to check if the
// numbers in the array
// end with the digits of
// the number N
public static int checkLastDigit(int num)
{
// Variable to store the count
int count = 0;
// Variable to store the last digit
int lastDigit;
lastDigit = num % 10;
// Checking the presence of
// the last digit in N
if (digit[lastDigit] == 1)
count++;
return count;
}
// Function to find
// the required count
public static void findCount(int N, int K,
int arr[])
{
int count = 0;
for(int i = 0; i < K; i++)
{
count = checkLastDigit(arr[i]) == 1 ?
count + 1 : count;
}
System.out.println(count);
}
// Driver code
public static void main(String[] args)
{
int N = 1731;
// Preprocessing
digitsPresent(N);
int K = 5;
int arr[] = { 57, 6786, 1111, 3, 9812 };
findCount(N, K, arr);
}
}
// This code is contributed by Sayantan Pal
Python3
# Python3 program to find the count
# of numbers in Array ending
# with digits of number N
# Array to keep the
# track of digits occurred
# Initially all are 0(false)
digit = [0] * 10
# Function to initialize true
# if the digit is present
def digitsPresent(n):
# Variable to store the last digit
lastDigit = 0;
# Loop to iterate through every
# digit of the number N
while (n != 0):
lastDigit = n % 10;
# Updating the array according
# to the presence of the
# digit in n at the array index
digit[int(lastDigit)] = 1;
n /= 10;
# Function to check if the numbers
# in the array end with the digits
# of the number N
def checkLastDigit(num):
# Variable to store the count
count = 0;
# Variable to store the last digit
lastDigit = 0;
lastDigit = num % 10;
# Checking the presence of
# the last digit in N
if (digit[int(lastDigit)] == 1):
count += 1
return count;
# Function to find the required count
def findCount(N, K, arr):
count = 0;
for i in range(K):
if checkLastDigit(arr[i]) == 1:
count += 1
else:
count
print(count)
# Driver code
N = 1731;
# Preprocessing
digitsPresent(N);
K = 5;
arr = [ 57, 6786, 1111, 3, 9812 ];
findCount(N, K, arr);
# This code is contributed by grand_master
C#
// C# program to find the count
// of numbers in Array ending
// with digits of number N
using System;
class GFG{
// Array to keep the track of digits occurred
// Initially all are 0(false)
public static int []digit = new int[10];
// Function to initialize 1(true)
// if the digit is present
public static void digitsPresent(int n)
{
// Variable to store the last digit
int lastDigit;
// Loop to iterate through every
// digit of the number N
while (n != 0)
{
lastDigit = n % 10;
// Updating the array according to the
// presence of the digit in n at the
// array index
digit[lastDigit] = 1;
n /= 10;
}
}
// Function to check if the numbers in the
// array end with the digits of the number N
public static int checkLastDigit(int num)
{
// Variable to store the count
int count = 0;
// Variable to store the last digit
int lastDigit;
lastDigit = num % 10;
// Checking the presence of
// the last digit in N
if (digit[lastDigit] == 1)
count++;
return count;
}
// Function to find the required count
public static void findCount(int N, int K,
int []arr)
{
int count = 0;
for(int i = 0; i < K; i++)
{
count = checkLastDigit(arr[i]) == 1 ?
count + 1 : count;
}
Console.WriteLine(count);
}
// Driver code
static public void Main()
{
int N = 1731;
// Preprocessing
digitsPresent(N);
int K = 5;
int []arr = { 57, 6786, 1111, 3, 9812 };
findCount(N, K, arr);
}
}
// This code is contributed by piyush3010
Javascript
输出:
3
时间复杂度:
- O(N),其中 N 是预处理的给定数字。
- O(K),其中 K 是为查询找到答案的查询数量。
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live