南海网站建设公司,温岭手机网站建设,wordpress+删除版权,贵州网站制作哪家好一、题目描述给你一个由 n 个整数组成的数组 nums #xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] #xff08;若两个四元组元素一一对应#xff0c;则认为两个四元组重复#xff09;#xff1a…一、题目描述给你一个由 n 个整数组成的数组 nums 和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] 若两个四元组元素一一对应则认为两个四元组重复0 a, b, c, d na、b、c 和 d 互不相同nums[a] nums[b] nums[c] nums[d] target你可以按 任意顺序 返回答案 。 示例 1输入nums [1,0,-1,0,-2,2], target 0输出[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]示例 2输入nums [2,2,2,2,2], target 8输出[[2,2,2,2]]来源力扣LeetCode链接https://leetcode.cn/problems/4sum著作权归领扣网络所有。商业转载请联系官方授权非商业转载请注明出处。二、运行结果三、解题思路这题的整体思路和三数之和的思路是一致的也是采用先排序然后用双指针的方式。三数之和可以思路课可以参考另一篇博文https://blog.csdn.net/LJH132465/article/details/129003854有一点区别就是三数之和是先固定一个数然后用双指针找到剩余的两个数这里四数之和是先固定两个数两层for循环每层表示固定一个数然后再用双指针找到剩余的两个数还要注意去除重复项的问题。四、AC代码class Solution {public ListListInteger fourSum(int[] nums, int target) {int len nums.length;ListListInteger ans new ArrayList();if(len 4) return ans;Arrays.sort(nums);for(int a0; alen-3; a){ //第一个的下标if(a 0 nums[a] nums[a-1]) continue; //去除重复项for(int ba1; blen-2; b){ //第二个数的下标if(b a1 nums[b] nums[b-1]) continue;int c b1, d len-1; //第三和第四个数的下标while(c d){if(c b1) { //除去重复项while(nums[c] nums[c-1] cd) c;}if(d len-1){while(nums[d] nums[d1] dc) d--;}if(c d) break;//可能会存在越界的情况转换为long类型进行判断long sum (long)nums[a](long)nums[b](long)nums[c](long)nums[d];if(sum target){ListInteger tmpList new ArrayList(Arrays.asList(nums[a],nums[b], nums[c], nums[d]));ans.add(tmpList);c; d--;} else if(sum target) d--;else c;}}}return ans;}
}