C++ 查找数组中缺失的两个数字
C++ 查找数组中缺失的两个数字
本文提供一个C++代码示例,用于查找给定数组中缺失的两个数字,数组包含28个取值范围为[1,30]的不重复元素。
**代码示例:**cpp#include
std::pair<int, int> findMissingNumbers(const std::vector
// 如果数组元素个数不为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
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;}
代码解释:
- 函数
findMissingNumbers: 接受一个整数数组作为输入,返回一个std::pair,包含两个缺失的数字。 - 首先检查数组大小是否为28,如果不是,则返回 {-1, -1}。 - 然后对数组进行排序,以便使用二分查找。 - 检查数组中是否有重复元素,如果有,则返回 {-1, -1}。 - 最后,遍历从1到30的所有数字,使用std::binary_search检查数字是否在数组中。如果不在,则将该数字存储为缺失的数字。2. 函数main: 包含一个示例数组,并调用findMissingNumbers函数查找缺失的数字。 - 最后,根据函数返回值打印结果。
要点:
- 使用
std::binary_search可以高效地在排序数组中查找元素。* 使用std::pair可以方便地返回两个值。* 代码中包含了对异常情况的处理,例如数组大小不符或存在重复元素。
原文地址: https://www.cveoy.top/t/topic/cpsD 著作权归作者所有。请勿转载和采集!