解题思路

为了找到给定数组中第一个缺失的自然数,我们可以使用以下步骤:

  1. 解析输入

    • 将输入的字符串按逗号分割,转换为整数数组。
  2. 查找缺失的数字

    • 遍历数组,检查从 0 开始的每个数字是否在数组中存在。
    • 如果某个数字不在数组中,则返回该数字。
  3. 处理边界情况

    • 如果所有数字都存在,则返回数组的最大值加一。

代码

#include <iostream>
#include <vector>
#include <sstream>
#include <unordered_set>
using namespace std;

class Solution {
public:
    int findMissingNumber(const string& s) {
        unordered_set<int> numSet;
        stringstream ss(s);
        string token;

        // 将字符串转换为整数并存入集合
        while (getline(ss, token, ',')) {
            numSet.insert(stoi(token));
        }

        // 查找缺失的数字
        for (int i = 0; i <= numSet.size(); i++) {
            if (numSet.find(i) == numSet.end()) {
                return i; // 返回第一个缺失的数字
            }
        }

        return -1; // 理论上不会执行到这里
    }
};

int main() {
    Solution solution;
    string input;
    getline(cin, input); // 读取输入
    cout << solution.findMissingNumber(input) << endl; // 输出缺失的数字
    return 0;
}
import java.util.*;

public class Main {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * @param s 输入的以逗号分隔的数字串
     * @return int 缺失的数字
     */
    public int findMissingNumber(String s) {
        String[] strNums = s.split(",");
        Set<Integer> numSet = new HashSet<>();

        // 将字符串转换为整数并存入集合
        for (String str : strNums) {
            numSet.add(Integer.parseInt(str));
        }

        // 查找缺失的数字
        for (int i = 0; i <= numSet.size(); i++) {
            if (!numSet.contains(i)) {
                return i; // 返回第一个缺失的数字
            }
        }

        return -1; // 理论上不会执行到这里
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine(); // 读取输入
        Main solution = new Main();
        System.out.println(solution.findMissingNumber(input)); // 输出缺失的数字
    }
}

def find_missing_number(s: str) -> int:
    # 将输入字符串转换为整数列表
    nums = list(map(int, s.split(',')))
    n = len(nums)

    # 遍历从 0 到 n 的每个数字
    for i in range(n + 1):
        if i not in nums:
            return i  # 返回第一个缺失的数字

    return -1  # 理论上不会执行到这里

# 示例用法
if __name__ == "__main__":
    input_str = input()  # 读取输入
    print(find_missing_number(input_str))  # 输出缺失的数字

算法及复杂度

  • 算法:遍历查找
  • 时间复杂度:,其中 是数组的长度
  • 空间复杂度:,用于存储数字集合