首页 > 编程知识 正文

存在最小的正整数,给定一个未排序的整数数组,找出其中没有出现的最小

时间:2023-05-04 19:24:49 阅读:184465 作者:1321

给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正整数是1;数组{1,2,3}中未出现的最小正整数是4。
思路:设置一个Lb作为标志顺序表,遍历La,如果La中出现一个正整数,则令Lb.elem[La.elem[i]] = 1,
证明La中曾经出现过这个正整数

#include<stdio.h>#include<stdlib.h>#define LISTINITSIZE 10typedef struct{int *elem;int length;int listsize;}sqlist;bool initlist_sq(sqlist &L);int main(){sqlist La,Lb;initlist_sq(La);initlist_sq(Lb);//定义顺序表 int i;printf("请输入顺序表La的长度:"); scanf("%d", &La.length);Lb.length = La.length + 1;printf("请输入顺序表La中的元素:"); for(i = 0; i < La.length; i ++)scanf("%d", &La.elem[i]);for(i = 1; i <= Lb.length; i ++)Lb.elem[i] = 0; //将顺序表Lb清零for(i = 0; i < La.length; i ++)if(La.elem[i] >= 1)Lb.elem[La.elem[i]] = 1;//设置一个Lb作为标志顺序表,如果La中出现一个正整数,则令Lb.elem[La.elem[i]] = 1 for(i = 1; i <= Lb.length; i ++)if(Lb.elem[i] == 0)break;//最早出现的LB为零的元素,即为未出现的最小正整数 printf("线性表中未出现的最小正整数是:%dn", i);} bool initlist_sq(sqlist &L)//初始化顺序表 {L.elem = (int *)malloc(LISTINITSIZE *sizeof(int));if(!L.elem)return false;L.length = 0;L.listsize = LISTINITSIZE;return true;}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。