本文主要是介绍【2018统考真题】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 效的算法,找出数组中未出现的最小正整数。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
【2018统考真题】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高
效的算法,找出数组中未出现的最小正整数。例如,数组{-5,3,2,3}中未出现的最小正
整数是1;数组{1,2,3}中未出现的最小正整数是4。
代码思路:
题目让你找未出现的最小正数,你就从1往下循环,用当前循环的数去看看数组里面有没有,也就是查找,我这里就用最简单暴力算法,你可以用其他一些高效的查找算法,比如快排啥的。
int find_minN(int A[],int len) {int i = 1;int j = 0;int flag = 0;//标记位,0表示数组里面没有当前的i,1表示有while(i){flag = 0;for (j = 0;j < len;j++) {if (i == A[j]) {flag = 1;continue;}}if (flag == 0) {//找到最小正整数return i;}i++;if (i > len) {return i;}}
}
int main() {int A[4] = { -5,3,2,3 };//几个测试用例int B[3] = { 1,2,3 };int C[10] = { 1,5,2,6 };int D[7] = { 2,3,1,5,6,4 };int m_A = find_minN(A,4);printf("A中未出现的最小正整数为%d\n", m_A);int m_B = find_minN(B,3);printf("B中未出现的最小正整数为%d\n", m_B);int m_C = find_minN(C, 4);printf("C中未出现的最小正整数为%d\n", m_C);int m_D = find_minN(D, 6);printf("D中未出现的最小正整数为%d\n", m_D);return 0;
}
这篇关于【2018统考真题】给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 效的算法,找出数组中未出现的最小正整数。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!