C语言lowestPrice函数去重后未更新数组长度导致测试失败怎么修复
lowestPrice函数bug修复方案
核心问题
代码失败的根因是:
- 去重逻辑执行完成后,没有统计去重后的数组实际长度,判断order合法性时仍然使用了原数组的长度
size - 测试用例4里去重后的数组长度仅为5,order=7大于实际长度,本该返回-1,但原逻辑用原数组长度10判断,7<10就进入取值逻辑,返回了错误结果
修复后的完整lowestPrice函数代码
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 + 1; 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]; } // 新增:计算去重后的数组实际长度 int unique_size = j + 1; // 修改:用去重后的长度判断order合法性 if(order > unique_size || order < 0){ return -1; } else { order--; return tempArray[order]; } }
修改点说明
- 去重逻辑结束后新增了
unique_size变量统计去重后的实际数组长度,j是去重后数组最后一个元素的下标,所以长度为j+1 - 将原来order合法性判断条件里的
size替换为unique_size,完全匹配需求要求的判断逻辑 - 原有排序、去重逻辑不需要改动,修复后所有测试用例均可正常通过
内容的提问来源于stack exchange,提问作者kan3
相关产品推荐
相关产品推荐

