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)

posted @ 2021-09-27 23:33  磐正  阅读(46)  评论(4)    收藏  举报