2016-12-03 2 views
0

以下のコードの時間の複雑さを理解するのに役立つ人がいますか?このプログラムは、すべての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 classで、parseInt()方法はwhile loop内で実行され、通過文字列の長さに応じて、それは意志異なる時間の複雑さを与えるが、もしので、私たちはそれがO(F(q))を取ると仮定し、あなたのコードの時間複雑さはO(s.length^2)+O((s.length)*O(F(q))

になります