【发布时间】:2020-12-27 22:53:57
【问题描述】:
我是 C++ 新手,并解决了在 O(n) 时间内重新排列排序数组的问题,以便首先出现最大元素,然后是最小值,然后是第二个最大值,然后是第二个最小值,所以它去了.
我的解决方案在没有辅助数组结果的情况下无法通过测试,然后我将值复制到该结果中 - 请参阅下面的初始和工作解决方案:
// initial:
void maxMin(int arr[], int size) {
bool switchPointer = true;
int min_ptr = 0;
int max_ptr = size - 1;
for (int i = 0; i < size; i++) {
if (switchPointer) {
arr[i] = arr[max_ptr];
max_ptr--;
} else {
arr[i] = arr[min_ptr];
min_ptr++;
}
switchPointer = !switchPointer;
}
}
// working
void maxMin(int arr[], int size) {
int* result = new int[size];
bool switchPointer = true;
int min_ptr = 0;
int max_ptr = size - 1;
for (int i = 0; i < size; i++) {
if (switchPointer) {
result[i] = arr[max_ptr];
max_ptr--;
} else {
result[i] = arr[min_ptr];
min_ptr++;
}
switchPointer = !switchPointer;
}
for (int j = 0; j < size; j++) {
arr[j] = result[j]; // copying to original array
}
delete [] result;
}
为什么我们需要一个辅助结果数组?谢谢!
【问题讨论】:
标签: c++ arrays dynamic-memory-allocation