我只是想知道是否有比我已经完成的方式更有效的方法来实现功能。该函数的限制是参数必须保持不变,并且我只能编辑函数内的内容。这是我的代码:
void function_four(int* arr, int size, int& lowest, int& highest){
lowest = *arr + 2;
highest = *arr + 2;
for(int i = 0; i < size; i++){
int* valptr = arr+i;
*valptr += 2;
int val = *valptr;
if(val > highest){
highest = val;
}
if(val < lowest){
lowest = val;
}
}
}
此函数的目的是通过添加两个值来更新数组中的每个值。
虽然这个解决方案有效,但我只是想知道是否存在更好的解决方案而不更改函数参数。
首先,我有两个不同的 for 循环:一个用于更新每个数组值,另一个用于查找数组中的最小/最大值。但是,我将它们合并在一起以减少运行时间。任何其他修复将不胜感激。
谢谢!
您当前的实现非常高效,但是我们可以通过将最低和最高值初始化为数组的第一个元素而不是向其添加 2 来进行一些小优化。此外,我们可以从索引 1 而不是 0 开始循环,因为我们已经处理了第一个元素来初始化最低和最高。
这是函数的修改版本:
void function_four(int* arr, int size, int& lowest, int& highest){
lowest = arr[0]; // Initialize to the first element of the array
highest = arr[0]; // Initialize to the first element of the array
for(int i = 1; i < size; i++){ // Start from index 1
arr[i] += 2; // Update the array value by adding 2
if(arr[i] > highest){
highest = arr[i];
}
if(arr[i] < lowest){
lowest = arr[i];
}
}
}
此修改消除了单独向第一个元素加 2 的需要,并减少了我们在循环内访问 arr 指针的次数,这可以导致性能略有提高。总的来说,你的函数已经相当高效了,这个小小的优化进一步提高了它的效率。