![](/img/trans.png)
[英]Time Complexity of an algorithm : How to decide which algorithm after calculated the time
[英]How can I decide which algorithm is more efficent for reverse an array
我試圖提高自己對算法的了解。
所以我試圖反轉 integer 個值的數組。
這是我的解決方案。
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;
}
一方面,您的算法需要的 memory 是另一個算法的兩倍。 由於創建的是數組的副本,如果數組長度為50,則需要再預留50個memory地址。 但是,另一個解決方案只需要保留 1 個 memory 地址(用於 1 個輔助int
),而不管原始數組的長度如何。
另一方面,您的算法迭代數組的所有元素,而另一個只需要迭代到中點。 理論上,這兩種解決方案具有相同的效率階數: O(n)
,但實際上另一種解決方案的迭代次數較少。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.