给定大小为n的数组,目标是找出在k> 0的情况下精确重复“ k”次的最小数字。
假设数组只有正整数,并且每个i = 0到n -1都为1 <= arr [i] <1000。
例子:
Input : arr[] = {2 2 1 3 1}
k = 2
Output: 1
Explanation:
Here in array,
2 is repeated 2 times
1 is repeated 2 times
3 is repeated 1 time
Hence 2 and 1 both are repeated 'k' times
i.e 2 and min(2, 1) is 1
Input : arr[] = {3 5 3 2}
k = 1
Output : 2
Explanation:
Both 2 and 5 are repeating 1 time but
min(5, 2) is 2
简单方法:一种简单的方法是使用两个嵌套循环。外部循环从最左边的元素开始一个接一个地选择一个元素。内部循环检查在其右侧是否存在相同的元素。如果存在,则增加计数并使我们在右侧获得的数字为负,以防止其再次计数。
C++
// C++ program to find smallest number
// in array that is repeated exactly
// 'k' times.
#include
using namespace std;
const int MAX = 1000;
int findDuplicate(int arr[], int n, int k)
{
// Since arr[] has numbers in range from
// 1 to MAX
int res = MAX + 1;
for (int i = 0; i < n; i++) {
if (arr[i] > 0) {
// set count to 1 as number is present
// once
int count = 1;
for (int j = i + 1; j < n; j++)
if (arr[i] == arr[j])
count += 1;
// If frequency of number is equal to 'k'
if (count == k)
res = min(res, arr[i]);
}
}
return res;
}
// Driver code
int main()
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = sizeof(arr) / (sizeof(arr[0]));
cout << findDuplicate(arr, n, k);
return 0;
}
Java
// Java program to find smallest number
// in array that is repeated exactly
// 'k' times.
public class GFG {
static final int MAX = 1000;
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int arr[], int n, int k)
{
// Since arr[] has numbers in range from
// 1 to MAX
int res = MAX + 1;
for (int i = 0; i < n; i++) {
if (arr[i] > 0) {
// set count to 1 as number is
// present once
int count = 1;
for (int j = i + 1; j < n; j++)
if (arr[i] == arr[j])
count += 1;
// If frequency of number is equal
// to 'k'
if (count == k)
res = Math.min(res, arr[i]);
}
}
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.length;
System.out.println(findDuplicate(arr, n, k));
}
}
// This article is contributed by Sumit Ghosh
Python3
# Python 3 program to find smallest
# number in array that is repeated
# exactly 'k' times.
MAX = 1000
def findDuplicate(arr, n, k):
# Since arr[] has numbers in
# range from 1 to MAX
res = MAX + 1
for i in range(0, n):
if (arr[i] > 0):
# set count to 1 as number
# is present once
count = 1
for j in range(i + 1, n):
if (arr[i] == arr[j]):
count += 1
# If frequency of number is equal to 'k'
if (count == k):
res = min(res, arr[i])
return res
# Driver code
arr = [2, 2, 1, 3, 1]
k = 2
n = len(arr)
print(findDuplicate(arr, n, k))
# This code is contributed by Smitha Dinesh Semwal.
C#
// C# program to find smallest number
// in array that is repeated exactly
// 'k' times.
using System;
public class GFG {
static int MAX = 1000;
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int[] arr,
int n, int k)
{
// Since arr[] has numbers in range
// from 1 to MAX
int res = MAX + 1;
for (int i = 0; i < n; i++)
{
if (arr[i] > 0)
{
// set count to 1 as number
// is present once
int count = 1;
for (int j = i + 1; j < n; j++)
if (arr[i] == arr[j])
count += 1;
// If frequency of number is
// equal to 'k'
if (count == k)
res = Math.Min(res, arr[i]);
}
}
return res;
}
// Driver code
public static void Main()
{
int[] arr = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.Length;
Console.WriteLine(
findDuplicate(arr, n, k));
}
}
// This article is contributed by vt_m.
PHP
0)
{
// set count to 1 as number is
// present once
$count = 1;
for ($j = $i + 1; $j < $n; $j++)
if ($arr[$i] == $arr[$j])
$count += 1;
// If frequency of number is
// equal to 'k'
if ($count == $k)
$res = min($res, $arr[$i]);
}
}
return $res;
}
// Driver code
$arr = array(2, 2, 1, 3, 1);
$k = 2;
$n = count($arr);
echo findDuplicate($arr, $n, $k);
// This code is contributed by Rajput-Ji
?>
C++
// C++ program to find smallest number
// in array that is repeated exactly
// 'k' times.
#include
using namespace std;
int findDuplicate(int arr[], int n, int k)
{
// Sort the array
sort(arr, arr + n);
// Find the first element with exactly
// k occurrences.
int i = 0;
while (i < n) {
int j, count = 1;
for (j = i + 1; j < n && arr[j] == arr[i]; j++)
count++;
if (count == k)
return arr[i];
i = j;
}
return -1;
}
// Driver code
int main()
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = sizeof(arr) / (sizeof(arr[0]));
cout << findDuplicate(arr, n, k);
return 0;
}
Java
// Java program to find smallest number
// in array that is repeated exactly
// 'k' times.
import java.util.Arrays;
public class GFG {
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int arr[], int n, int k)
{
// Sort the array
Arrays.sort(arr);
// Find the first element with exactly
// k occurrences.
int i = 0;
while (i < n) {
int j, count = 1;
for (j = i + 1; j < n && arr[j] == arr[i]; j++)
count++;
if (count == k)
return arr[i];
i = j;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.length;
System.out.println(findDuplicate(arr, n, k));
}
}
// This article is contributed by Sumit Ghosh
Python
# Python program to find smallest number
# in array that is repeated exactly
# 'k' times.
def findDuplicate(arr, n, k):
# Sort the array
arr.sort()
# Find the first element with exactly
# k occurrences.
i = 0
while (i < n):
j, count = i + 1, 1
while (j < n and arr[j] == arr[i]):
count += 1
j += 1
if (count == k):
return arr[i]
i = j
return -1
# Driver code
arr = [ 2, 2, 1, 3, 1 ];
k = 2
n = len(arr)
print findDuplicate(arr, n, k)
# This code is contributed by Sachin Bisht
C#
// C# program to find smallest number
// in array that is repeated exactly
// 'k' times.
using System;
public class GFG {
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int[] arr,
int n, int k)
{
// Sort the array
Array.Sort(arr);
// Find the first element with
// exactly k occurrences.
int i = 0;
while (i < n) {
int j, count = 1;
for (j = i + 1; j < n &&
arr[j] == arr[i]; j++)
count++;
if (count == k)
return arr[i];
i = j;
}
return -1;
}
// Driver code
public static void Main()
{
int[] arr = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.Length;
Console.WriteLine(
findDuplicate(arr, n, k));
}
}
// This article is contributed by vt_m.
PHP
C++
// C++ program to find smallest number
// in array that is repeated exactly
// 'k' times.
#include
using namespace std;
const int MAX = 1000;
int findDuplicate(int arr[], int n, int k)
{
// Computing frequencies of all elements
int freq[MAX];
memset(freq, 0, sizeof(freq));
for (int i = 0; i < n; i++) {
if (arr[i] < 1 && arr[i] > MAX) {
cout << "Out of range";
return -1;
}
freq[arr[i]] += 1;
}
// Finding the smallest element with
// frequency as k
for (int i = 0; i < MAX; i++) {
// If frequency of any of the number
// is equal to k starting from 0
// then return the number
if (freq[i] == k)
return i;
}
return -1;
}
// Driver code
int main()
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = sizeof(arr) / (sizeof(arr[0]));
cout << findDuplicate(arr, n, k);
return 0;
}
Java
// Java program to find smallest number
// in array that is repeated exactly
// 'k' times.
public class GFG {
static final int MAX = 1000;
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int arr[], int n, int k)
{
// Computing frequencies of all elements
int[] freq = new int[MAX];
for (int i = 0; i < n; i++) {
if (arr[i] < 1 && arr[i] > MAX) {
System.out.println("Out of range");
return -1;
}
freq[arr[i]] += 1;
}
// Finding the smallest element with
// frequency as k
for (int i = 0; i < MAX; i++) {
// If frequency of any of the number
// is equal to k starting from 0
// then return the number
if (freq[i] == k)
return i;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.length;
System.out.println(findDuplicate(arr, n, k));
}
}
// This article is contributed by Sumit Ghosh
Python
# Python program to find smallest number
# in array that is repeated exactly
# 'k' times.
MAX = 1000
def findDuplicate(arr, n, k):
# Computing frequencies of all elements
freq = [0 for i in range(MAX)]
for i in range(n):
if (arr[i] < 1 and arr[i] > MAX):
print "Out of range"
return -1
freq[arr[i]] += 1
# Finding the smallest element with
# frequency as k
for i in range(MAX):
# If frequency of any of the number
# is equal to k starting from 0
# then return the number
if (freq[i] == k):
return i
return -1
# Driver code
arr = [ 2, 2, 1, 3, 1 ]
k = 2
n = len(arr)
print findDuplicate(arr, n, k)
# This code is contributed by Sachin Bisht
C#
// C# program to find smallest number
// in array that is repeated exactly
// 'k' times.
using System;
public class GFG {
static int MAX = 1000;
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int[] arr,
int n, int k)
{
// Computing frequencies of all
// elements
int[] freq = new int[MAX];
for (int i = 0; i < n; i++)
{
if (arr[i] < 1 && arr[i] > MAX)
{
Console.WriteLine("Out of range");
return -1;
}
freq[arr[i]] += 1;
}
// Finding the smallest element with
// frequency as k
for (int i = 0; i < MAX; i++) {
// If frequency of any of the
// number is equal to k starting
// from 0 then return the number
if (freq[i] == k)
return i;
}
return -1;
}
// Driver code
public static void Main()
{
int[] arr = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.Length;
Console.WriteLine(
findDuplicate(arr, n, k));
}
}
// This article is contributed by vt_m.
PHP
$MAX)
{
echo "Out of range";
return -1;
}
$freq[$arr[$i]] += 1;
}
// Finding the smallest element with
// frequency as k
for ($i = 0; $i < $MAX; $i++)
{
// If frequency of any of the number
// is equal to k starting from 0
// then return the number
if ($freq[$i] == $k)
return $i;
}
return -1;
}
// Driver code
$arr = array( 2, 2, 1, 3, 1 );
$k = 2;
$n = count($arr);
echo findDuplicate($arr, $n, $k);
// This code is contributed by mits
?>
输出:
1
时间复杂度: O(n 2 )
辅助空间: O(1)
此解决方案不需要将数组元素限制在有限范围内。
更好的解决方案:对输入数组进行排序,并找到第一个元素,该元素的出现数为k。
C++
// C++ program to find smallest number
// in array that is repeated exactly
// 'k' times.
#include
using namespace std;
int findDuplicate(int arr[], int n, int k)
{
// Sort the array
sort(arr, arr + n);
// Find the first element with exactly
// k occurrences.
int i = 0;
while (i < n) {
int j, count = 1;
for (j = i + 1; j < n && arr[j] == arr[i]; j++)
count++;
if (count == k)
return arr[i];
i = j;
}
return -1;
}
// Driver code
int main()
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = sizeof(arr) / (sizeof(arr[0]));
cout << findDuplicate(arr, n, k);
return 0;
}
Java
// Java program to find smallest number
// in array that is repeated exactly
// 'k' times.
import java.util.Arrays;
public class GFG {
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int arr[], int n, int k)
{
// Sort the array
Arrays.sort(arr);
// Find the first element with exactly
// k occurrences.
int i = 0;
while (i < n) {
int j, count = 1;
for (j = i + 1; j < n && arr[j] == arr[i]; j++)
count++;
if (count == k)
return arr[i];
i = j;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.length;
System.out.println(findDuplicate(arr, n, k));
}
}
// This article is contributed by Sumit Ghosh
Python
# Python program to find smallest number
# in array that is repeated exactly
# 'k' times.
def findDuplicate(arr, n, k):
# Sort the array
arr.sort()
# Find the first element with exactly
# k occurrences.
i = 0
while (i < n):
j, count = i + 1, 1
while (j < n and arr[j] == arr[i]):
count += 1
j += 1
if (count == k):
return arr[i]
i = j
return -1
# Driver code
arr = [ 2, 2, 1, 3, 1 ];
k = 2
n = len(arr)
print findDuplicate(arr, n, k)
# This code is contributed by Sachin Bisht
C#
// C# program to find smallest number
// in array that is repeated exactly
// 'k' times.
using System;
public class GFG {
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int[] arr,
int n, int k)
{
// Sort the array
Array.Sort(arr);
// Find the first element with
// exactly k occurrences.
int i = 0;
while (i < n) {
int j, count = 1;
for (j = i + 1; j < n &&
arr[j] == arr[i]; j++)
count++;
if (count == k)
return arr[i];
i = j;
}
return -1;
}
// Driver code
public static void Main()
{
int[] arr = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.Length;
Console.WriteLine(
findDuplicate(arr, n, k));
}
}
// This article is contributed by vt_m.
的PHP
输出:
1
时间复杂度: O(n Log n)
辅助空间: O(1)
高效方法:高效方法是基于数组的数字范围较小(1到1000)的事实。我们通过使用大小为max的频率数组来解决此问题,并将每个数字的频率存储在该数组中。
C++
// C++ program to find smallest number
// in array that is repeated exactly
// 'k' times.
#include
using namespace std;
const int MAX = 1000;
int findDuplicate(int arr[], int n, int k)
{
// Computing frequencies of all elements
int freq[MAX];
memset(freq, 0, sizeof(freq));
for (int i = 0; i < n; i++) {
if (arr[i] < 1 && arr[i] > MAX) {
cout << "Out of range";
return -1;
}
freq[arr[i]] += 1;
}
// Finding the smallest element with
// frequency as k
for (int i = 0; i < MAX; i++) {
// If frequency of any of the number
// is equal to k starting from 0
// then return the number
if (freq[i] == k)
return i;
}
return -1;
}
// Driver code
int main()
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = sizeof(arr) / (sizeof(arr[0]));
cout << findDuplicate(arr, n, k);
return 0;
}
Java
// Java program to find smallest number
// in array that is repeated exactly
// 'k' times.
public class GFG {
static final int MAX = 1000;
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int arr[], int n, int k)
{
// Computing frequencies of all elements
int[] freq = new int[MAX];
for (int i = 0; i < n; i++) {
if (arr[i] < 1 && arr[i] > MAX) {
System.out.println("Out of range");
return -1;
}
freq[arr[i]] += 1;
}
// Finding the smallest element with
// frequency as k
for (int i = 0; i < MAX; i++) {
// If frequency of any of the number
// is equal to k starting from 0
// then return the number
if (freq[i] == k)
return i;
}
return -1;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.length;
System.out.println(findDuplicate(arr, n, k));
}
}
// This article is contributed by Sumit Ghosh
Python
# Python program to find smallest number
# in array that is repeated exactly
# 'k' times.
MAX = 1000
def findDuplicate(arr, n, k):
# Computing frequencies of all elements
freq = [0 for i in range(MAX)]
for i in range(n):
if (arr[i] < 1 and arr[i] > MAX):
print "Out of range"
return -1
freq[arr[i]] += 1
# Finding the smallest element with
# frequency as k
for i in range(MAX):
# If frequency of any of the number
# is equal to k starting from 0
# then return the number
if (freq[i] == k):
return i
return -1
# Driver code
arr = [ 2, 2, 1, 3, 1 ]
k = 2
n = len(arr)
print findDuplicate(arr, n, k)
# This code is contributed by Sachin Bisht
C#
// C# program to find smallest number
// in array that is repeated exactly
// 'k' times.
using System;
public class GFG {
static int MAX = 1000;
// finds the smallest number in arr[]
// that is repeated k times
static int findDuplicate(int[] arr,
int n, int k)
{
// Computing frequencies of all
// elements
int[] freq = new int[MAX];
for (int i = 0; i < n; i++)
{
if (arr[i] < 1 && arr[i] > MAX)
{
Console.WriteLine("Out of range");
return -1;
}
freq[arr[i]] += 1;
}
// Finding the smallest element with
// frequency as k
for (int i = 0; i < MAX; i++) {
// If frequency of any of the
// number is equal to k starting
// from 0 then return the number
if (freq[i] == k)
return i;
}
return -1;
}
// Driver code
public static void Main()
{
int[] arr = { 2, 2, 1, 3, 1 };
int k = 2;
int n = arr.Length;
Console.WriteLine(
findDuplicate(arr, n, k));
}
}
// This article is contributed by vt_m.
的PHP
$MAX)
{
echo "Out of range";
return -1;
}
$freq[$arr[$i]] += 1;
}
// Finding the smallest element with
// frequency as k
for ($i = 0; $i < $MAX; $i++)
{
// If frequency of any of the number
// is equal to k starting from 0
// then return the number
if ($freq[$i] == $k)
return $i;
}
return -1;
}
// Driver code
$arr = array( 2, 2, 1, 3, 1 );
$k = 2;
$n = count($arr);
echo findDuplicate($arr, $n, $k);
// This code is contributed by mits
?>
输出:
1
时间复杂度: O(MAX + n)
辅助空间: O(MAX)
如果范围不受限制,我们可以在O(n)时间内解决吗?
请参阅最小元素正好重复“ k”次(不限于小范围)