2016-03-30 53 views
0

我有下面的代碼來返回數組中的迴文 - 代碼工作正常,但我實際上將arraylist轉換爲一個數組 - 因爲大小是未知的 - 這是一個代價高昂轉換在這裏?時間複雜度是多少?新到Java編碼 - 寫在我自己的代碼,但我堅持找出時間複雜度爲數組轉換..返回一個Palindromes數組 - 轉換數組到列表

public class palindrome{ 

public static void main(String[] args){ 

String[] arr = {"saw","madam","level","taco","tomot"}; 
String[] res = palind(arr); 
System.out.println(java.util.Arrays.toString(res)); 
} 

public static String[] palind(String[] arr){ 
    int count = 0; 
    java.util.ArrayList<String> list = new java.util.ArrayList<String>(); 
    for(String s : arr){ 
      if(isPalindrome(s) == true){ 
       count++; 
       list.add(s); 
      } 
     } 
    String[] a = list.toArray(new String[count]); 
    return a; 
} 

public static boolean isPalindrome(String s){ 
return s.equals(new StringBuilder(s).reverse().toString()); 
} 
} 
+0

成本是「試試看」,真的。沒有必要在這裏進行數組轉換,只需使用'ArrayList '來處理所有數據。在頂部使用'import java.util.ArrayList;',所以不要在整個地方使用完全符合命名空間限定的對象語法。把事情簡單化。 –

回答

0

這是一個昂貴的轉換,如果你能解決它。如果沒有辦法解決這個問題,那就算了,否則,即使它的成本很高,你也別無選擇。

解決方法是放棄返回數組。如果你選擇從palind方法返回一個List<String>

public static List<String> palind(String[] arr) { 
//.. 
} 

如果不是太麻煩了,你甚至可以接受List<String>這裏,使其陣列免費。

1

應該是O(n),其中n是數組的大小。我看到遍歷數組的時間是n遍,遍歷的每一步都有恆定的時間。