Clean accepted java O(n^3) solution based on 3sum
public class Solution {\n    public List<List<Integer>> fourSum(int[] num, int target) {\n        ArrayList<List<Integer>> ans = new ArrayList<>();\n        if(
    public class Solution {\n    public List<List<Integer>> fourSum(int[] num, int target) {\n        ArrayList<List<Integer>> ans = new ArrayList<>();\n        if(num.length<4)return ans;\n        Arrays.sort(num);\n        for(int i=0; i<num.length-3; i++){\n            if(num[i]+num[i+1]+num[i+2]+num[i+3]>target)break; //first candidate too large, search finished\n            if(num[i]+num[num.length-1]+num[num.length-2]+num[num.length-3]<target)continue; //first candidate too small\n            if(i>0&&num[i]==num[i-1])continue; //prevents duplicate result in ans list\n            for(int j=i+1; j<num.length-2; j++){\n                if(num[i]+num[j]+num[j+1]+num[j+2]>target)break; //second candidate too large\n                if(num[i]+num[j]+num[num.length-1]+num[num.length-2]<target)continue; //second candidate too small\n                if(j>i+1&&num[j]==num[j-1])continue; //prevents duplicate results in ans list\n                int low=j+1, high=num.length-1;\n                while(low<high){\n                    int sum=num[i]+num[j]+num[low]+num[high];\n                    if(sum==target){\n                        ans.add(Arrays.asList(num[i], num[j], num[low], num[high]));\n                        while(low<high&&num[low]==num[low+1])low++; //skipping over duplicate on low\n                        while(low<high&&num[high]==num[high-1])high--; //skipping over duplicate on high\n                        low++; \n                        high--;\n                    }\n                    //move window\n                    else if(sum<target)low++; \n                    else high--;\n                }\n            }\n        }\n        return ans;\n    }\n\nupdated with optimizations and comments
['Java']