2016-12-03 131 views
0

有人可以幫助我理解下面代碼的時間複雜性。該程序用於將所有的零移到數組的右側。瞭解時間複雜度

class TestClass { 
    public static void main(String args[]) throws Exception { 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 

     String []s = br.readLine().split(" "); 

     int a[] = new int[s.length]; 

     for(int i=0;i<s.length;i++) 
      a[i]=Integer.parseInt(s[i]); 


     int j= a.length-1; 
     int i=0; 

     while(j>=0 && i<a.length-1 && j-i>0){ 
       if(a[i]==0){ 
        while(a[j]==0) 
        j--; 
        int temp=a[i]; 
        a[i]=a[j]; 
        a[j]=temp; 
       } 
       i++; 
     } 

     for(int k:a) 
      System.out.print(k+" "); 

    } 
} 

回答

0

計算時間複雜度將是困難的,如果我們試圖包括a[i]=Integer.parseInt(s[i]);Integer classparseInt()方法while loop內運行,並根據通過字符串的長度,它會給出不同的時間複雜度,但如果我們假設它會花費O(F(q)),代碼的時間複雜度將會是O(s.length^2)+O((s.length)*O(F(q))