如何基于std::unordered_set实现solLoops函数的集合版本?
使用std::unordered_set实现与solLoops相同功能的solSet函数
首先,我们先明确原solLoops函数的核心逻辑:遍历数组中的每一对相邻元素,若后一个元素减去前一个元素的结果≤1,则计数加1,最终返回总次数。需要注意的是,原函数的条件不考虑差值的绝对值——哪怕后一个元素远小于前一个元素(比如前一个是5,后一个是1,差值为-4),也会被计入统计。
接下来,我们基于std::unordered_set实现相同功能。虽然从逻辑上讲,统计相邻元素对并不强制需要集合结构,但我们可以按照要求将元素存入集合的同时完成相邻元素的判断:
#include <iostream> #include <vector> #include <unordered_set> int solSet(std::vector<int> A) { std::unordered_set<int> S; int count = 0; // 处理空数组的边界情况 if (A.empty()) { return 0; } // 先将第一个元素存入集合 S.insert(A[0]); // 从第二个元素开始遍历,逐一与前一个元素比较 for (int i = 1; i < A.size(); ++i) { int prev_val = A[i-1]; // 沿用原solLoops的判断条件:后一个元素 - 前一个元素 ≤1 if (A[i] - prev_val <= 1) { count++; } // 将当前元素存入集合 S.insert(A[i]); } return count; }
补充说明
如果你的实际需求是统计相邻元素差值的绝对值≤1的次数(这更符合“差值≤1”的常规理解),可以将判断条件修改为:
if (std::abs(A[i] - prev_val) <= 1) { count++; }
这时候集合依然可以保留,虽然它不直接参与判断,但如果你后续有扩展需求(比如快速查找元素是否存在),集合会派上用场。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

