4Sum
来源:互联网 发布:js object empty 编辑:程序博客网 时间:2024/05/18 01:30
一、问题描述
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = target? Find all unique quadruplets in the array which gives the sum of target.
Note: The solution set must not contain duplicate quadruplets.
For example, given array S = [1, 0, -1, 0, -2, 2], and target = 0.A solution set is:[ [-1, 0, 0, 1], [-2, -1, 1, 2], [-2, 0, 0, 2]]
二、思路
分别处理前两个数,解题思路类似3Num:3Num,我们先处理前两个数,在处理前两个数时,如果遇到和上一个数相同的数就跳过,还有由于是排过序的数组,所以如果当前的i所指向i 、 i + 1、i + 2、i + 3这四个数如果大于target,那么直接退出循环,如果i 和n -1、 n -2、 n -3这四个数之和小于target,则退出本次循环。第二个数的预处理和第一个数类似。接着处理第三第四个数,如果四个数的等于target,则直接存入数组,如果大于或者小于,就移动指针。
三、代码
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> v; int n = nums.size(); if(n<4) return v; sort(nums.begin(),nums.end()); for(int i = 0; i < n-3; i++){ if(i > 0 && nums[i] == nums[i - 1]) continue; if(nums[i] + nums[i + 1] + nums[i + 2] + nums[i + 3] > target) break; if(nums[i] + nums[n - 3] + nums[n - 2] + nums[n - 1] < target) continue; for(int j = i + 1; j < n-2; j++){ if(j > i + 1 && nums[j] == nums[j - 1]) continue; if(nums[i] + nums[j] + nums[j + 1] + nums[j + 2] > target) break; if(nums[i] + nums[j] + nums[n - 2] + nums[n - 1] < target) continue; int k=j+1,l=n-1; while(k < l){ int sum = nums[k] + nums[l] + nums[i] + nums[j]; if(sum < target) k++; else if(sum>target) l--; else{ v.push_back(vector<int>{nums[i],nums[j],nums[k],nums[l]}); while(nums[k] == nums[k - 1] && k < l) ++k; while(nums[l] == nums[l + 1] && k < l) --l; ++k; --l; } } } } return v; }};
0 0
- 【Leetcode】4Sum (Sum)
- leetcode 2 sum 3sum 4sum
- 3Sum 3Sum Closest 4Sum
- 3Sum & 3Sum Closest & 4Sum
- 2Sum 3Sum 4Sum
- 3sum、3Sum closet、 4sum
- 3Sum, 3Sum Closest, 4 Sum
- Leetcode 2SUM-3SUM-4SUM
- Leetcode-2sum,3sum,4sum
- leetcode 2 sum & 3 sum & 4 sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- 4Sum
- ROM、RAM、DRAM、SRAM和FLASH的区别
- GB28181开流SDP各个字段汇总整理
- 【机器学习】推导支持向量机SVM二分类
- 理解Linux中 modify time、change time、access time
- 使用CocoaPods(一)为项目配置第三方类库
- 4Sum
- Mockito的使用一
- 使用自定义注解生成简单查询sql语句
- Grails: 连接mysql数据库
- AngularJS: directive
- 下拉刷新 上拉加载 支持各种view
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- 算法:已经二叉树的前序遍历和中序遍历 写出后序遍历算法
- getNetworkInfo