2017-09-15 2 views
-1

Je trouve difficile de calculer la complexité du temps du programme ci-dessous. S'il vous plaît donner quelques suggestions?Comment pouvons-nous calculer la complexité du temps du programme ci-dessous:

class Solution { 
    int i=0,j=1,k,m; 
    public int[] twoSum(int[] nums, int target) { 

     int sum; 
     boolean flag=false; 
     int arr[] = new int[2]; 
     for(k=j;k<nums.length;k++){ 
      sum=nums[i]+nums[k]; 

      if(sum==target){ 
       flag=true; 
       m=k; 
       break; 
       } 
     } 
     if(flag==false){ 
      i++; 
      j++;     
      twoSum(nums,target); 
     } 

     arr[0]=i; 
     arr[1]=m; 
     return arr; 
    } 
} 

J'ai écrit ce code pour retourner les indices des deux nombres tels qu'ils ajoutent à une cible spécifique. chaque entrée aurait exactement une solution. maintenant je dois calculer les complexités pour vérifier et soumettre le code

+0

Avez-vous examiné comment calculer les complexités d'un algorithme? Peut être un bon endroit pour commencer. Votre message ne montre aucune recherche antérieure, et semble actuellement être une demande plutôt qu'une question réelle. Consultez le [centre d'aide] (https://stackoverflow.com/help) pour savoir comment publier des questions. –

+0

Vérifiez ceci: https://stackoverflow.com/questions/16232629/what-is-time-complexity-and-how-to-find-it –

+0

J'ai essayé d'y jeter un coup d'œil. Je suis capable de calculer quand il s'agit de boucle simple ou double boucle ou binaire mais quand il s'agit de hachage ou de récursion ou 2-3 structures à la fois, je semble toujours échouer à atteindre pour corriger la complexité.It était une question à vérifier quelle serait la complexité de ce code, donc je peux l'optimiser – shivoham

Répondre

0

Etes-vous sûr que cela fonctionne? Même si c'est le cas, cela peut finir par avoir une complexité exponentielle dans le pire des cas. Essayez avec une solution brute force où vous bouclez chaque élément x et trouvez s'il y a une autre valeur qui équivaut à target - x, qui sera O(n^2), vous pouvez penser à une solution plus optimale qui utilise des balayages linéaires et des hashmaps alors.

+0

En fait, il a la complexité O (N^2) (mais parfois il ne finit jamais du tout). Regardez attentivement l'appel récursif «twoSum» est en dehors de la boucle. – talex