2018-408算法题

题目

找出数组中未出现的最小正整数

思想

建立长度为 n 的辅助数组A,值全为0。
遍历原数组,出现不超过数组长度的正整数 x,将 A[x-1] 改为 1。
遍历数组 A, 第一个为 0 元素 A[i], i+1 为所求值。若都为 1,则长度加一为所求值

代码

int find(int B[], int len) {
    int *A;
    A = (int *)malloc(sizeof(int)*len);
    memset(A, 0, sizeof(int)*len);

    for (int k = 0; k < len; k++) {
        if (B[k] > 0 && B[k] <= len) {
            A[B[k] - 1] = 1;
        }
            
    }
    for (int i = 0; i < len; i++) {
        if (A[i] == 0) return i+1;
    } 
    return len+1;
}

测试

int main() {
    int B1[] = {-5, 3, 2, 3};
    int B2[] = {1, 2, 3, 4};
    printf("find(B1): %d \n", find(B1, 4));
    printf("find(B2): %d \n", find(B2, 4));
    return 0;
}
捕获5.PNG
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.链表 1.实现一个单向链表 2.找出链表相交节点,假设均没有环 3.判断链表是否有环思路:使用快慢两个指针,当...
    X1028阅读 3,914评论 0 0
  • 归去来兮。 1.1 说明 本篇为《挑战程序设计竞赛(第2版)》[http://www.ituring.com.cn...
    尤汐Yogy阅读 14,878评论 0 160
  • 第一题 一个数组有N个数,给一个数字S,找到数组两个数字加起来等于S,这个数组中只有一个解 第二题 两个链表节点都...
    liwsh阅读 4,751评论 0 0
  • 一、和问题 2020.09.21 No.1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你...
    维李设论阅读 4,055评论 0 1
  • 内容来源:网上找的,并非原创,原链接找不到了!特此说明!! 排序 比较排序 冒泡排序 重复地走访过要排序的数列,每...
    sunjiandev阅读 2,241评论 0 0