给定一个包含N 个整数的数组arr ,任务是在数组中找到频率与其值相等的最大数。如果不存在这样的数字,则打印 -1。
例子:
Input: arr = [3, 2, 5, 2, 4, 5]
Output: 2
Explanation:
In this given array frequency of 2 is 2, whereas the frequency of the remaining numbers doesnt match with itself. So the answer is 2.
Input: arr = [3, 3, 3, 4, 4, 4, 4]
Output: 4
Explanation:
In this given array frequency of 3 is 3 and 4 is 4 but largest number is 4. So the answer is 4.
Input: arr = [1, 1, 1, 2, 3, 3]
Output: -1
Explanation:
There is no such number in the given array whose frequency is equal to itself. Thus the output is -1.
简单的方法:
- 创建一个新数组以保留给定数组中出现的次数。
- 以相反的顺序遍历新数组。
- 返回计数等于自身的第一个数字。
下面是上述方法的实现:
C++
// C++ solution to the above problem
#include
using namespace std;
// Function to find the largest number
// whose frequency is equal to itself.
int findLargestNumber(vector& arr)
{
// Find the maximum element in the array
int k = *max_element(arr.begin(),
arr.end());
int m[k] = {};
for (auto n : arr)
++m[n];
for (auto n = arr.size(); n > 0; --n) {
if (n == m[n])
return n;
}
return -1;
}
// Driver code
int main()
{
vector arr = { 3, 2, 5, 2, 4, 5 };
cout << findLargestNumber(arr) << endl;
return 0;
}
Java
// Java solution to the above problem
import java.util.*;
class GFG{
// Function to find the largest number
// whose frequency is equal to itself.
static int findLargestNumber(int[] arr)
{
// Find the maximum element in the array
int k = Arrays.stream(arr).max().getAsInt();
int []m = new int[k + 1];
for(int n : arr)
++m[n];
for(int n = arr.length - 1; n > 0; --n)
{
if (n == m[n])
return n;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int[] arr = { 3, 2, 5, 2, 4, 5 };
System.out.print(findLargestNumber(arr) + "\n");
}
}
// This code is contributed by amal kumar choubey
Python3
# Python3 solution to the above problem
# Function to find the largest number
# whose frequency is equal to itself.
def findLargestNumber(arr):
# Find the maximum element in the array
k = max(arr);
m = [0] * (k + 1);
for n in arr:
m[n] += 1;
for n in range(len(arr) - 1, 0, -1):
if (n == m[n]):
return n;
return -1;
# Driver code
if __name__ == '__main__':
arr = [ 3, 2, 5, 2, 4, 5 ];
print(findLargestNumber(arr));
# This code is contributed by amal kumar choubey
C#
// C# solution to the above problem
using System;
using System.Linq;
class GFG{
// Function to find the largest number
// whose frequency is equal to itself.
static int findLargestNumber(int[] arr)
{
// Find the maximum element in the array
int k = arr.Max();
int []m = new int[k + 1];
foreach(int n in arr)
++m[n];
for(int n = arr.Length - 1; n > 0; --n)
{
if (n == m[n])
return n;
}
return -1;
}
// Driver code
public static void Main(String[] args)
{
int[] arr = { 3, 2, 5, 2, 4, 5 };
Console.Write(findLargestNumber(arr) + "\n");
}
}
// This code is contributed by amal kumar choubey
Javascript
C++
// C++ code for the above problem
#include
using namespace std;
// Function to find the largest number
// whose frequency is equal to itself.
int findLargestNumber(vector& arr)
{
for (auto n : arr) {
n &= 0xFFFF;
if (n <= arr.size()) {
// Adding 65536 to keep the
// count of the current number
arr[n - 1] += 0x10000;
}
}
for (auto i = arr.size(); i > 0; --i) {
// right shifting by 16 bits
// to find the count of the
// number i
if ((arr[i - 1] >> 16) == i)
return i;
}
return -1;
}
// Driver code
int main()
{
vector arr
= { 3, 2, 5, 5, 2, 4, 5 };
cout << findLargestNumber(arr)
<< endl;
return 0;
}
Java
// Java code for the above problem
class GFG{
// Function to find the largest number
// whose frequency is equal to itself.
static int findLargestNumber(int[] arr, int n)
{
for(int i = 0; i < n; i++)
{
arr[i] &= 0xFFFF;
if (arr[i] <= n)
{
// Adding 65536 to keep the
// count of the current number
arr[i] += 0x10000;
}
}
for(int i = n - 1; i > 0; --i)
{
// Right shifting by 16 bits
// to find the count of the
// number i
if ((arr[i] >> 16) == i)
return i + 1;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int []arr = { 3, 2, 5, 5, 2, 4, 5 };
int n = arr.length;
System.out.print(findLargestNumber(arr, n) + "\n");
}
}
// This code is contributed by gauravrajput1
Python3
# Python3 code for the above problem
# Function to find the largest number
# whose frequency is equal to itself.
def findLargestNumber(arr, n):
for i in range(n):
arr[i] &= 0xFFFF;
if (arr[i] <= n):
# Adding 65536 to keep the
# count of the current number
arr[i] += 0x10000;
for i in range(n - 1, 0, -1):
# Right shifting by 16 bits
# to find the count of the
# number i
if ((arr[i] >> 16) == i):
return i + 1;
return -1;
# Driver code
if __name__ == '__main__':
arr = [ 3, 2, 5, 5, 2, 4, 5 ];
n = len(arr);
print(findLargestNumber(arr, n));
# This code is contributed by Rohit_ranjan
C#
// C# code for the above problem
using System;
class GFG{
// Function to find the largest number
// whose frequency is equal to itself.
static int findLargestNumber(int[] arr, int n)
{
for(int i = 0; i < n; i++)
{
arr[i] &= 0xFFFF;
if (arr[i] <= n)
{
// Adding 65536 to keep the
// count of the current number
arr[i] += 0x10000;
}
}
for(int i = n - 1; i > 0; --i)
{
// Right shifting by 16 bits
// to find the count of the
// number i
if ((arr[i] >> 16) == i)
return i + 1;
}
return -1;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 3, 2, 5, 5, 2, 4, 5 };
int n = arr.Length;
Console.Write(findLargestNumber(arr, n) + "\n");
}
}
// This code is contributed by 29AjayKumar
Javascript
2
时间复杂度: O(N)
辅助空间复杂度: O(N)
另一种方法:
注意:此方法仅在给定数组中的数字小于 65536 即 2 16 时有效。
- 在这里,使用输入数组来存储计数。
- 由于值有限,只需使用整数的前半部分(前 16 位)通过添加 65536 来保持计数。
- 使用右移运算符(右移 16 位)同时以相反的顺序遍历数组并返回计数等于自身的第一个数字。
下面是上述方法的实现:
C++
// C++ code for the above problem
#include
using namespace std;
// Function to find the largest number
// whose frequency is equal to itself.
int findLargestNumber(vector& arr)
{
for (auto n : arr) {
n &= 0xFFFF;
if (n <= arr.size()) {
// Adding 65536 to keep the
// count of the current number
arr[n - 1] += 0x10000;
}
}
for (auto i = arr.size(); i > 0; --i) {
// right shifting by 16 bits
// to find the count of the
// number i
if ((arr[i - 1] >> 16) == i)
return i;
}
return -1;
}
// Driver code
int main()
{
vector arr
= { 3, 2, 5, 5, 2, 4, 5 };
cout << findLargestNumber(arr)
<< endl;
return 0;
}
Java
// Java code for the above problem
class GFG{
// Function to find the largest number
// whose frequency is equal to itself.
static int findLargestNumber(int[] arr, int n)
{
for(int i = 0; i < n; i++)
{
arr[i] &= 0xFFFF;
if (arr[i] <= n)
{
// Adding 65536 to keep the
// count of the current number
arr[i] += 0x10000;
}
}
for(int i = n - 1; i > 0; --i)
{
// Right shifting by 16 bits
// to find the count of the
// number i
if ((arr[i] >> 16) == i)
return i + 1;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int []arr = { 3, 2, 5, 5, 2, 4, 5 };
int n = arr.length;
System.out.print(findLargestNumber(arr, n) + "\n");
}
}
// This code is contributed by gauravrajput1
蟒蛇3
# Python3 code for the above problem
# Function to find the largest number
# whose frequency is equal to itself.
def findLargestNumber(arr, n):
for i in range(n):
arr[i] &= 0xFFFF;
if (arr[i] <= n):
# Adding 65536 to keep the
# count of the current number
arr[i] += 0x10000;
for i in range(n - 1, 0, -1):
# Right shifting by 16 bits
# to find the count of the
# number i
if ((arr[i] >> 16) == i):
return i + 1;
return -1;
# Driver code
if __name__ == '__main__':
arr = [ 3, 2, 5, 5, 2, 4, 5 ];
n = len(arr);
print(findLargestNumber(arr, n));
# This code is contributed by Rohit_ranjan
C#
// C# code for the above problem
using System;
class GFG{
// Function to find the largest number
// whose frequency is equal to itself.
static int findLargestNumber(int[] arr, int n)
{
for(int i = 0; i < n; i++)
{
arr[i] &= 0xFFFF;
if (arr[i] <= n)
{
// Adding 65536 to keep the
// count of the current number
arr[i] += 0x10000;
}
}
for(int i = n - 1; i > 0; --i)
{
// Right shifting by 16 bits
// to find the count of the
// number i
if ((arr[i] >> 16) == i)
return i + 1;
}
return -1;
}
// Driver code
public static void Main(String[] args)
{
int []arr = { 3, 2, 5, 5, 2, 4, 5 };
int n = arr.Length;
Console.Write(findLargestNumber(arr, n) + "\n");
}
}
// This code is contributed by 29AjayKumar
Javascript
2
时间复杂度: O(N)
辅助空间复杂度: O(1)
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live