C++ 查找数组中缺失的两个数字

本文提供一个C++代码示例,用于查找给定数组中缺失的两个数字,数组包含28个取值范围为[1,30]的不重复元素。

**代码示例:**cpp#include #include #include

std::pair<int, int> findMissingNumbers(const std::vector& arr) { std::pair<int, int> result = {-1, -1}; int n = arr.size();

// 如果数组元素个数不为28,返回{-1, -1}    if (n != 28) {        return result;    }

// 对数组进行排序    std::vector<int> sortedArr = arr;    std::sort(sortedArr.begin(), sortedArr.end());

// 检查是否存在重复元素    for (int i = 1; i < n; i++) {        if (sortedArr[i] == sortedArr[i-1]) {            return result;        }    }

// 查找缺失的数字    for (int i = 1; i <= 30; i++) {        if (!std::binary_search(sortedArr.begin(), sortedArr.end(), i)) {            if (result.first == -1) {                result.first = i;            } else {                result.second = i;                break;            }        }    }

return result;}

int main() { std::vector arr = {1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 30};

std::pair<int, int> missingNumbers = findMissingNumbers(arr);

if (missingNumbers.first == -1) {        std::cout << '数组元素个数不为28或存在重复元素。' << std::endl;    } else {        std::cout << '缺失的数字是:' << missingNumbers.first << ' 和 ' << missingNumbers.second << std::endl;    }

return 0;}

代码解释:

  1. 函数 findMissingNumbers: 接受一个整数数组作为输入,返回一个 std::pair,包含两个缺失的数字。 - 首先检查数组大小是否为28,如果不是,则返回 {-1, -1}。 - 然后对数组进行排序,以便使用二分查找。 - 检查数组中是否有重复元素,如果有,则返回 {-1, -1}。 - 最后,遍历从1到30的所有数字,使用 std::binary_search 检查数字是否在数组中。如果不在,则将该数字存储为缺失的数字。2. 函数 main: 包含一个示例数组,并调用 findMissingNumbers 函数查找缺失的数字。 - 最后,根据函数返回值打印结果。

要点:

  • 使用 std::binary_search 可以高效地在排序数组中查找元素。* 使用 std::pair 可以方便地返回两个值。* 代码中包含了对异常情况的处理,例如数组大小不符或存在重复元素。
C++ 查找数组中缺失的两个数字

原文地址: https://www.cveoy.top/t/topic/cpsD 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录