classSolution{public List<List<Integer>>threeSum(int[] nums){int n = nums.length;
Arrays.sort(nums);
List<List<Integer>> ans =newArrayList<List<Integer>>();// 枚举 afor(int first =0; first < n;++first){// 需要和上一次枚举的数不相同if(first >0&& nums[first]== nums[first -1]){continue;}// c 对应的指针初始指向数组的最右端int third = n -1;int target =-nums[first];// 枚举 bfor(int second = first +1; second < n;++second){// 需要和上一次枚举的数不相同if(second > first +1&& nums[second]== nums[second -1]){continue;}// 需要保证 b 的指针在 c 的指针的左侧while(second < third && nums[second]+ nums[third]> target){--third;}// 如果指针重合,随着 b 后续的增加// 就不会有满足 a+b+c=0 并且 b<c 的 c 了,可以退出循环if(second == third){break;}if(nums[second]+ nums[third]== target){
List<Integer> list =newArrayList<Integer>();
list.add(nums[first]);
list.add(nums[second]);
list.add(nums[third]);
ans.add(list);}}}return ans;}}
publicclassSolution{publicintmaxArea(int[] height){int l =0, r = height.length -1;int ans =0;while(l < r){int area = Math.min(height[l], height[r])*(r - l);
ans = Math.max(ans, area);if(height[l]<= height[r]){++l;}else{--r;}}return ans;}}