我试图找到一个数组的最小值然后检查最小值频率,但问题是如果数组的大小和它存储的值很大,我的代码就不起作用。
1 < A[i] < 10^9
1 < N < 10^5 1< T < 10
这里A是数组,N是数组的大小,T是测试用例的数量
c程序
#include<stdio.h>
#include<stdlib.h>
寻找最小值
int findMin(int A[], int N)
{
int min;
int i;
if(N>2)
{
for(i=0;i<N;i++)
{
if( A[i]<=A[i+1])
{
min = A[i];
int temp = A[i];
A[i]=A[i+1];
A[i+1] = temp;
}
}
}
else
{
min = A[0];
}
return freq(min,A,N);
}
数组中最小值出现的频率
int freq(int min, int A[], int N)
{
int i,count=0;
for(i=0;i<N;i++)
{
if(min == A[i])
{
count++;
}
}
return count%2;
}
主要()
int main()
{
int *A,N;
int i,T;
scanf("%d",&T);
while(T>0)
{
scanf("%d",&N);
A = (int *)calloc(N,sizeof(int));
for(i=0;i<N;i++)
{
scanf("%d",&A[i]);
}
if(findMin(A,N) == 1)
{
printf("Lucky\n");
}
else
{
printf("Unlucky\n");
}
T--;
}
return 0;
}
[编辑] 编码目标
count%2
用于检查频率是奇数还是偶数
最佳答案
如果您对查找数组中的最小值感兴趣,并且对“频率”感兴趣,您将其定义为最小值的计数是奇数还是偶数,也许这就是您需要的?
int findMinAndFreq(int A[], int N){
if(N == 0){
printf("Array is empty");
return 0;
}
if(N == 1){
return 1;
}
int min = A[0];
int count = 1;
for(int i = 1; i<N; i++){
if(A[i] == min){
count++;
}
if(A[i] < min){
min = A[i];
count = 1;
}
}
return count%2;
}
关于c - 如何在非常大的数组中找到最小值,并在 c 中的数组中找到大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45639759/