2016-10-29 1 views
0

この時間制限がどこから来るのか理解してくれる人がいますか? https://leetcode.com/problems/3sum/入れ子にされたfor-whileループで時間制限を超過しました

public class Solution { 
public List<List<Integer>> threeSum(int[] nums) { 

    List<List<Integer>> retList = new ArrayList<List<Integer>>(); 

    Arrays.sort(nums); // O(nlogn) 

    for (int i=0; i<nums.length-1; i++){ 
     int pleft; 
     int pright; 
     if (i!=0){ 
      pleft = i-1; 
      while((nums[pleft]==nums[i]) && (pleft-1 >=0)){ 
       pleft--; 
      } 
     } else { 
      pleft = i; 
     } 
     if (i!=nums.length-2){ 
      pright = i+1; 
      while((nums[pright]==nums[i]) && (pright+1 < nums.length-1)){ 
       pright++; 
      } 
     } else { 
      pright = i; 
     } 
     int sum; 
     while (true){ 
      sum = nums[pleft]+nums[pright]+nums[i]; 
      if (sum==0){ 
       List<Integer> temp = new ArrayList<Integer>(); 
       temp.add(nums[pleft]); 
       temp.add(nums[pright]); 
       temp.add(nums[i]); 
       retList.add(temp); 
       if (pleft-1>=0) pleft--; 
       if (pright+1<nums.length-1) pright++; 
      } else if (sum>0){ 
       if (pleft-1>=0) pleft--; 
      } else { // less than zero 
       if (pright+1<nums.length-1) pright++; 
      } 

     } 
    } 


    return retList; 
} 

}

+1

に変更する必要がありますwhile(true){} 'そのループには「中断」はありません – rafid059

答えて

1

:コンテキストが配列を指定して、このthreeSum方法で、私は元の質問から来て0にまで追加3つの数値のすべての可能な組み合わせを記録しようとしているということですあなたはあなたのwhile(true)ループから脱出していません。そのコードは永遠に実行され、値を返さないでしょう。 breakを追加するか、while (true)while (condition)

関連する問題