Leetcode018 4Sum
2016-03-11 20:44
274 查看
public class S018 { //借鉴S015,速度有些慢 public List<List<Integer>> fourSum(int[] nums, int target) { Arrays.sort(nums); List<List<Integer>> result = new ArrayList<List<Integer>>(); for(int i =0;i<nums.length-3;i++){ if(i>0&&nums[i]==nums[i-1]){ continue;//重复的直接跳过 } for(int j = i+1;j<nums.length-2;j++){ if(j>i+1&&nums[j]==nums[j-1]){ continue;//重复的直接跳过 } int left = j+1;//从i+1开始也是防止重复的办法 int right = nums.length-1; while(left<right){ if(nums[left]+nums[right]+nums[i]+nums[j] == target){ List<Integer> temp = new ArrayList<Integer>();//必须每次新建 temp.add(nums[i]); temp.add(nums[left]); temp.add(nums[right]); temp.add(nums[j]); Collections.sort(temp); result.add(temp); //特别注意下面两个while循环 left++; right--;//防止重复 while(left<right&&nums[left]==nums[left-1]){ left++;//防止重复 } while(left<right&&nums[right]==nums[right+1]){ right--;//防止重复 } //这两个条件特别重要,思考一下为何分别是left++和right--; }else if(nums[left]+nums[right]+nums[i]+nums[j]<target){ left++; }else{ right--; } } } } return result; } }
相关文章推荐
- python3 字符串属性(三)
- js中利用call和apply的应用--继承
- linux初步学习之用户和用户组及权限管理浅谈
- HDU 1260
- POJ 3694 Network (tarjan + LCA)
- [转]与中国K12主流教育相悖,自适应学习如何突破?
- HDOJ1175 连连看
- Windows下编译ffmpeg库过程
- 【面试】get和post的区别
- cocos studio 打包 ;external NDK_TOOLCHAIN_VERSION=4.9' 执行命令出错,返回值:2。
- 无住生心
- 隐性改变display类型
- poj 1067 取石子游戏
- hdu1879(最小生成树)
- 【高精度】【高精度四则运算模板】高精度除法
- 国外程序员整理的 C++ 资源大全
- Android 之 资源文件的介绍及使用
- [转载]2016年高考二轮复习备考文化常识100题及答案详解
- [转载]2016年高考二轮复习备考文化常识100题及答案详解
- [转载]2016年高考二轮复习备考文化常识100题及答案详解