You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:25:05