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

如何对价格数组排序去重并获取指定排序位次的数值?

价格数组排序去重并取对应位次数值的实现方案

原代码存在的问题

  • 去重逻辑错误:原代码中tempArray[j] = tempArray[i-1]的逻辑位置、判断逻辑都不正确,当i=0时还会出现下标-1的内存越界问题,同时没有把排序后的最后一个元素纳入去重范围,会导致结果缺失。
  • 无参数校验:没有判断输入的size是否合法、order是否超过去重后的数组长度,很容易出现非法内存访问问题。
  • 变量类型不匹配:size参数为int类型,但循环迭代变量用了无符号的size_t,遇到size为负的极端场景会出现逻辑异常。

修正后的实现代码

int lowestPrice(int array[], int size, int order) {
    // 入参合法性校验,错误返回值可根据自身业务需求调整
    if (size <= 0 || order < 0) {
        return -1;
    }
    int tempArray[size];
    // 拷贝原数组,避免修改原始数据
    for (int i = 0; i < size; i++) {
        tempArray[i] = array[i];
    }
    // 升序排序,沿用你原本使用的选择排序逻辑
    for (int i = 0; i < size; i++) {
        for (int j = i; j < size; j++) {
            if (tempArray[j] < tempArray[i]) {
                int tmp = tempArray[i];
                tempArray[i] = tempArray[j];
                tempArray[j] = tmp;
            }
        }
    }
    // 数组去重逻辑
    int uniqueLen = 0;
    for (int i = 0; i < size; i++) {
        // 首元素直接保留,后续元素仅和上一个已保留元素不同时才留存
        if (i == 0 || tempArray[i] != tempArray[uniqueLen - 1]) {
            tempArray[uniqueLen] = tempArray[i];
            uniqueLen++;
        }
    }
    // 校验位次是否超出去重后的数组长度
    if (order >= uniqueLen) {
        return -1;
    }
    // 返回对应位次数值,order从0计数:0=最低价、1=次低价,以此类推
    return tempArray[order];
}

使用说明

  • 9个价格数组分别调用该函数即可得到对应位次的价格数值,不会修改原始数组内容。
  • 如果需要位次从1开始计数(比如传1返回最低价),只需要把最终return语句里的order改为order-1即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:06:04