超时怎么破~~~~


  • 0
    K

    public class Solution {
    public List<List<Integer>> threeSum(int[] nums) {
    List<List<Integer>> res = new ArrayList<List<Integer>>();
    Arrays.sort(nums);

    	for(int i=0;i<nums.length-2;i++){
    		for(int j=i+1;j<nums.length-1;j++){
    			for(int k=j+1;k<nums.length;k++){
    				if(nums[i]+nums[j]==(-nums[k])){
    					if(i>0&&nums[i]==nums[i-1] || j>0&&(j!=i+1)&&nums[j]==nums[j-1] || k>0&&(k!=j+1)&&nums[k]==nums[k-1]){
    						break;				
    					}else{	
    						res.add(Arrays.asList(nums[i], nums[j], nums[k]));
    	
    					}
    				}
    			}
    		}
    	}
    	
    	return res;
    }
    

    }


  • 1
    E

    老哥你别全循环...
    你排过序了不是么
    以0为基准
    从两头往中间找 各设一个标记
    到0就别跑了
    比如现在一个-3 一个 2
    现在加起来和0之间是差了个正1的
    然后你就从右标记继续往左走 能找到1找1
    找不到1 到了0就下一组


Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.