给定大小为N的数组arr []和代表数字的整数K ,任务是根据数字K在数组元素中的递增频率,以升序打印给定数组。
例子:
Input: arr[] = {15, 66, 26, 91}, K = 6
Output: 15 91 26 66
Explanation:
The frequency of digit 6 in array elements is {0, 2, 1, 0}. The elements in increasing order of frequency of the digit 6 in {15, 91, 26, 66}.
Input: arr[] = {20, 21, 0}, K = 0
Output: 21 20 0
Explanation:
The frequency of digit 0 in array elements is {1, 0, 1}. The elements in increasing order of frequency of the digit 0 is {21, 20, 0}.
方法:想法是对数组中每个元素的数字K的出现进行计数,并根据该数组对数组进行排序。请按照以下步骤解决问题:
- 初始化一个多重映射(例如mp) ,以按排序顺序在每个元素中存储K的出现。
- 使用变量i遍历给定的数组arr []并执行以下操作:
- 将数字K的出现存储在变量cnt中的arr [i]中。
- 在mp中插入一对cnt和arr [i] 。
- 在mp中打印数组元素以获取所需的排序顺序。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to count the occurrences
// of digit K in an element
int countOccurrences(int num, int K)
{
// If num and K are both 0
if (K == 0 && num == 0)
return 1;
// Initialize count as 0
int count = 0;
// Count for occurrences of digit K
while (num > 0) {
if (num % 10 == K)
count++;
num /= 10;
}
// Return the count
return count;
}
// Function to print the given array
// in increasing order of the digit
// K in the array elements
void sortOccurrences(int arr[],
int N, int K)
{
// Stores the occurrences of K
// in each element
multimap mp;
// Traverse the array
for (int i = 0; i < N; i++) {
// Count the frequency
// of K in arr[i]
int count = countOccurrences(
arr[i], K);
// Insert elements in mp
mp.insert(pair(
count, arr[i]));
}
// Print the elements in the map, mp
for (auto& itr : mp) {
cout << itr.second << " ";
}
}
// Driver Code
int main()
{
int arr[] = { 15, 66, 26, 91 };
int K = 6;
int N = sizeof(arr) / sizeof(arr[0]);
// Function Call
sortOccurrences(arr, N, K);
return 0;
}
Java
// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG {
// Function to count the occurrences
// of digit K in an element
static int countOccurrences(int num, int K)
{
// If num and K are both 0
if (K == 0 && num == 0)
return 1;
// Initialize count as 0
int count = 0;
// Count for occurrences of digit K
while (num > 0) {
if (num % 10 == K)
count++;
num /= 10;
}
// Return the count
return count;
}
// Pair class
static class Pair {
int idx;
int freq;
Pair(int idx, int freq)
{
this.idx = idx;
this.freq = freq;
}
}
// Function to print the given array
// in increasing order of the digit
// K in the array elements
static void sortOccurrences(int arr[], int N, int K)
{
// Stores the Pair with index
// and occurences of K of each element
Pair mp[] = new Pair[N];
// Traverse the array
for (int i = 0; i < N; i++) {
// Count the frequency
// of K in arr[i]
int count = countOccurrences(arr[i], K);
// Insert Pair in mp
mp[i] = new Pair(i, count);
}
// sort the mp in increasing order of freq
// if freq equal then according to index
Arrays.sort(mp, (p1, p2) -> {
if (p1.freq == p2.freq)
return p1.idx - p2.idx;
return p1.freq - p2.freq;
});
// Print the elements in the map, mp
for (Pair p : mp) {
System.out.print(arr[p.idx] + " ");
}
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 15, 66, 26, 91 };
int K = 6;
int N = arr.length;
// Function Call
sortOccurrences(arr, N, K);
}
}
// This code is contributed by Kingash.
Python3
# Python program for the above approach
# Function to count the occurrences
# of digit K in an element
def countOccurrences( num, K):
# If num and K are both 0
if (K == 0 and num == 0):
return 1
# Initialize count as 0
count = 0
# Count for occurrences of digit K
while (num > 0):
if (num % 10 == K):
count += 1
num //= 10
# Return the count
return count
# Function to print the given array
# in increasing order of the digit
# K in the array elements
def sortOccurrences(arr, N, K):
# Stores the occurrences of K
# in each element
mp = []
# Traverse the array
for i in range(N):
# Count the frequency
# of K in arr[i]
count = countOccurrences(arr[i], K)
# Insert elements in mp
mp.append([count, arr[i]])
# Print the elements in the map, mp
mp = sorted(mp)
for itr in mp:
print(itr[1], end = ' ')
# Driver Code
arr = [ 15, 66, 26, 91 ]
K = 6
N = len(arr)
# Function Call
sortOccurrences(arr, N, K);
# This code is contributed by rohitsingh07052.
输出:
15 91 26 66
时间复杂度: O(N * log 10 N)
辅助空间: O(N)