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

如何统计有序序列中指定容差范围内的不同元素数量

解决思路

因为输入序列已经完成升序排序,无需额外排序操作,仅需单次遍历即可完成统计,时间复杂度为O(n):

  • 若序列为空直接返回0;非空序列初始化计数器为1,取第一个元素作为初始基准值
  • 从第二个元素开始遍历,每个元素和当前基准值做容差校验
  • 如果当前元素与基准值的差值超出容差范围,计数器加1,同时将当前元素更新为新的基准值
  • 遍历结束后计数器的值即为符合规则的唯一值总数
代码实现

你提供的测试序列与容差判断方法如下:

var l = new List<double>() { 0, 0 + 1e-7, 0 + 2e-7, 1 - 1e-7, 1 };

static bool IsWithinTolerance(double x, double y)
{
    return Math.Abs(x - y) < 1e-6;
}

统计方法实现:

static int CountUniqueWithTolerance(List<double> sortedList, Func<double, double, bool> toleranceCheck)
{
    if (sortedList == null || sortedList.Count == 0)
        return 0;
    
    int uniqueCount = 1;
    double lastBaseValue = sortedList[0];
    
    for (int i = 1; i < sortedList.Count; i++)
    {
        if (!toleranceCheck(sortedList[i], lastBaseValue))
        {
            uniqueCount++;
            lastBaseValue = sortedList[i];
        }
    }
    return uniqueCount;
}
测试结果

调用方法:

int result = CountUniqueWithTolerance(l, IsWithinTolerance);

最终result返回值为2,符合预期:前3个元素均在0的容差范围内,后2个元素均在1的容差范围内,合计2个符合规则的唯一值。

内容的提问来源于stack exchange,提问作者malat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 22:36:01