2018 41
1.暴力解法,不推荐使用
#include<stdio.h>
void Swap(int& a, int& b)
{
int temp;
temp=a;
a=b;
b=temp;
}
void BubbleSort(int arr[], int length)
{
int temp;
for(int i=0;i<length-1;i++)//循环次数
for(int j=0;j<length-1-i;j++)//比较次数次数
if(arr[j]>arr[j+1])
//Swap(arr[j],arr[j+1]);
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
int Find(int arr[], int length)
{
BubbleSort(arr,length);
int min=1;
for(int i=0;i<length;i++)
{
if(min==arr[i])
min++;
}
return min;
}
int main()
{
int arr1[]={-5,3,2,3};
int arr2[]={1,2,3,4};
int arr3[]={-1,3,4,-2,2,-10,1,5,6};
printf("%d\n",Find(arr3,9));
return 0;
}
可以将各种函数整合到一起
时间复杂度O(n2),空间复杂度O(1)
2.最优解法
以空间换取时间
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int Find(int arr[], int length)
{
int i;
int* temp;
temp=(int*)malloc(sizeof(int)*length);
memset(temp,0,sizeof(int)*length);
for(i=0;i<length;i++)
if(arr[i]>0&&arr[i]<=length)
temp[arr[i]-1]=1;
for(i=0;i<length;i++)
if(temp[i]==0)
break;
return i+1;
}
int main()
{
int arr1[]={-5,3,2,3};
int arr2[]={1,2,3,4};
int arr3[]={-1,3,4,-2,2,-10,1,5,6};
printf("%d\n",Find(arr3,9));
return 0;
}
时间复杂度O(n),空间复杂度O(n)

浙公网安备 33010602011771号