【问题标题】:how can I remove a duplicates from sorted array?如何从排序数组中删除重复项?
【发布时间】:2022-01-03 04:04:30
【问题描述】:

我应该做的是对价格列表进行排序并按顺序选择其中一个值,但数组中有重复的价格如何删除它们?

我有 9 个数组,我需要对它们进行排序并打印出订单的价值(最低价、次低价等),抱歉没有清除。

int lowestPrice(int array[], int size, int order){

int tempArray[size];
    
    for (size_t i = 0; i < size; i++)
        tempArray[i] = array[i];

    for (size_t i = 0; i < size; i++)
        for (size_t j = i; j < size; j++)
            if (tempArray[j] < tempArray[i]) {
                int tmp = tempArray[i];
                tempArray[i] = tempArray[j];
                tempArray[j] = tmp;
            }
    int j = 0;
    for (size_t i = 0; i < size -1; i++){
        if(tempArray[i] != tempArray[i+1])
        {
            tempArray[j] = tempArray[i];
            j++;
        } tempArray[j] = tempArray[i-1];
    }

    return tempArray[order];    
}

【问题讨论】:

  • 如果最低价格是重复价格,那就是最低价格。为什么要关心删除重复项?
  • @kan3 当您需要返回一个值时,不清楚为什么要这样做。
  • 您的意思是您有一个可能无序的 x 个价格数组,其中一些可能是重复的,您需要将每个唯一价格按顺序排列,然后返回由 @987654322 指定的第 n 个价格@?
  • 用户将订购本例中的价格之一 { 25000, 20000, 29499, 10000, 20000, 29000, 25000, 20000 , 25000 , 10000 };
  • 所以您需要将该数组从小到大排序,去掉重复项,然后在order 位置返回价格?

标签: arrays c


【解决方案1】:

您应该将最后一个“for”替换为:

int j = 0;
for (size_t i = 1; i < size ; i++){
    if(tempArray[i] != tempArray[i-1])
    {
        tempArray[j] = tempArray[i];
        j++;
    }
}

您要做的是保留每个数字的第一个,因此如果当前一个等于最后一个,它将忽略它。

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2021-11-12
    • 2021-01-27
    • 2016-01-24
    • 1970-01-01
    • 2021-12-12
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    相关资源
    最近更新 更多