Given a number N and an array arr[] consisting of K numbers, the task is to find the count of numbers in the array which ends with any of the digit present in the number N.
Examples:
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
Naive Approach: The naive approach for this problem is that for every number in the array arr[], check if its last digit is equal to any of the digits in N. Increment the count for each of such number and print it at the end.
Time Complexity: O(N * K), where N is the number and K is the number of elements in the array arr[].
Efficient Approach: The efficient approach for this problem is to perform a preprocessing.
- Initially, create an array A[] of size 10.
- This array acts as a hash which stores all the digits occurred in the number N.
- After this, for every number in the array arr[], extract the last digit and check if this last digit has occurred or not in the array.
- Increment the count for each of such number and print it at the end.
Below is the implementation of the above approach:
// C++ program to find the count // of numbers in Array ending // with digits of number N #include <bits/stdc++.h> 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 program to find the count // of numbers in Array ending // with digits of number N import java.io.*;
public 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 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# 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 |
<script> // Javascript 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) let digit = new Uint8Array(10);
// Function to initialize true // if the digit is present function digitsPresent(n)
{ // Variable to store the last digit
let 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 = Math.floor(n/10);
}
} // Function to check if the // numbers in the array // end with the digits of // the number N function checkLastDigit(num)
{ // Variable to store the count
let count = 0;
// Variable to store the last digit
let 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 function findCount(N, K, arr)
{ let count = 0;
for (let i = 0; i < K; i++) {
count = checkLastDigit(arr[i]) == 1
? count + 1
: count;
}
document.write(count + "<br>" );
} // Driver code let N = 1731;
// Preprocessing
digitsPresent(N);
let K = 5;
let arr = [ 57, 6786,
1111, 3, 9812 ];
findCount(N, K, arr);
//This code is contributed by Mayank Tyagi </script> |
3
Time Complexity:
- O(N), where N is the given number for preprocessing.
- O(K), where K is the number of queries to find answers for the queries.
Auxiliary Space: O(1)