如何确定哪种算法对反转数组更有效
How can I decide which algorithm is more efficent for reverse an array
我正在努力提高自己对算法的了解。
所以我尝试反转整数值数组。
这是我的解决方案。
static int[] reverseArray(int[] arr){
int[] newArr =new int[arr.length];
for (int i = arr.length-1, j = 0; i>=0; i-- , j++){
newArr[j] = arr[i];
}
return newArr;
}
这就是我在网站上看到的答案。所以我的头脑有点混乱。在我看来,我的解决方案更简单、更好。我不明白为什么我们必须将它一分为二,例如我认为没有必要。那么任何人都可以帮助我解决我的问题吗?
for(int i = 0; i < my_array1.length / 2; i++)
{
int temp = my_array1[i];
my_array1[i] = my_array1[my_array1.length - i - 1];
my_array1[my_array1.length - i - 1] = temp;
}
一方面,您的算法需要的内存是另一个算法的两倍。由于创建的是数组的副本,如果数组的长度为50,则需要多预留50个内存地址。然而,另一种解决方案只需要保留 1 个内存地址(用于 1 个辅助 int
),而不管原始数组的长度。
另一方面,你的算法迭代数组的所有元素,而另一个只需要迭代到中点。
理论上,两种解决方案的效率顺序相同:O(n)
但实际上,另一种解决方案的迭代次数较少。
我正在努力提高自己对算法的了解。
所以我尝试反转整数值数组。
这是我的解决方案。
static int[] reverseArray(int[] arr){
int[] newArr =new int[arr.length];
for (int i = arr.length-1, j = 0; i>=0; i-- , j++){
newArr[j] = arr[i];
}
return newArr;
}
这就是我在网站上看到的答案。所以我的头脑有点混乱。在我看来,我的解决方案更简单、更好。我不明白为什么我们必须将它一分为二,例如我认为没有必要。那么任何人都可以帮助我解决我的问题吗?
for(int i = 0; i < my_array1.length / 2; i++)
{
int temp = my_array1[i];
my_array1[i] = my_array1[my_array1.length - i - 1];
my_array1[my_array1.length - i - 1] = temp;
}
一方面,您的算法需要的内存是另一个算法的两倍。由于创建的是数组的副本,如果数组的长度为50,则需要多预留50个内存地址。然而,另一种解决方案只需要保留 1 个内存地址(用于 1 个辅助 int
),而不管原始数组的长度。
另一方面,你的算法迭代数组的所有元素,而另一个只需要迭代到中点。
理论上,两种解决方案的效率顺序相同:O(n)
但实际上,另一种解决方案的迭代次数较少。