📌  相关文章
📜  教资会网络 | UGC-NET CS 2017 年 11 月 – III |问题 62(1)

📅  最后修改于: 2023-12-03 15:10:16.580000             🧑  作者: Mango

UGC-NET CS 2017 November - III | Problem 62

简介

此问题是关于计算机科学与应用的UGC-NET考试的一部分。该考试主要面向印度的大学和学院教育界,考试覆盖计算机科学和应用中的各个方面。问题62要求程序员编写一个程序,在给定的整数数组中找到缺少的最小正整数。

程序说明

输入是一个数组,数组元素可能为正数、负数或零。程序需要找到在该数组中缺失的最小正整数并输出。

例如,给定的数组为[1,2,0],程序应返回“3”;再例如,给定的数组为[3,4,-1,1],程序应返回“2”。

输入格式:

  • 第一行包含整数N,表示输入数组的大小。
  • 接下来的N行,每行包含一个数组元素。

输出格式:

  • 输出程序在输入数组中找到的缺失的最小正整数。
思路

此题可以使用哈希表来解决,我们可以使用一个哈希表来存储输入的数列中出现过的所有正整数,在存储过程中,去掉负数和零。然后从1开始枚举所有的正整数,根据哈希表来判断枚举是否为缺失数即可。

代码

下面是Python语言中的实现:

def minPositiveMissingInt(nums):
    if not nums:
        return 1     # 如果输入数组为空,则缺失的最小正整数为1

    nums = set(nums)  # 去重
    res = 1
    while res in nums:  # 如果res在nums中出现过,继续尝试下一个
        res += 1

    return res

下面是Java语言中的实现:

public static int minPositiveMissingInt(int[] nums) {
    if (nums == null || nums.length == 0) {
        return 1;     // 如果输入数组为空,则缺失的最小正整数为1
    }

    Set<Integer> set = new HashSet<>();   // 建立一个HashSet来存储所有非负数
    for(int num : nums) {
        if (num > 0) {
            set.add(num);
        }
    }

    int res = 1;
    while (set.contains(res)) {   // 如果res在set中出现过,继续尝试下一个
        res ++;
    }

    return res;
}
结论

问题62要求程序员编写一个程序,在输入的数组中找到缺失的最小正整数。通过建立哈希表、去重和遍历的方式,我们可以轻易地解决这个问题。