在嵌套的 for-while 循环中超出了时间限制

time limit exceeded in a nested for-while loop

谁能帮我了解一下这个限时超限是从哪里来的?上下文是,在这个 threeSum 方法中,给定一个数组,我试图记录加起来为 0 的三个数字的所有可能组合。原始问题来自:https://leetcode.com/problems/3sum/

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;
}

}

你没有打破你的 while(true) 循环。该代码将永远 运行 而你不会 return 一个值。您需要添加一个 break 或将 while (true) 更改为 while (condition)