河南省建设教育协会网站,ps制作网站产品图片,html网站搭建,安装应用商店给你一个由 n 个整数组成的数组 nums #xff0c;和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] #xff08;若两个四元组元素一一对应#xff0c;则认为两个四元组重复#xff09;#xff1a;
0 a,…给你一个由 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
你可以按 任意顺序 返回答案 。 // 给你一个由 n 个整数组成的数组 nums 和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]]
// 若两个四元组元素一一对应则认为两个四元组重复
// nums[a] nums[b] nums[c] nums[d] target
// -1
// 1 1 -1 -2 - -2 -1 1 1
// -2 (-1) -3
// -1 1 2 2
// -11 0class Solution {
public:vectorvectorint fourSum(vectorint nums, int target) {vectorvectorint result;sort(nums.begin(),nums.end());int sum 0;int left,right;for(int k0;knums.size();k) {// 剪枝处理if(nums[k] target nums[k] 0) break;// 正确去重a方法if(k0 nums[k] nums[k-1]) continue;for(int i k 1;i nums.size();i) {// 2级剪枝处理 ? 什么时候会出现这种情况if(nums[k] nums[i] target nums[k] nums[i] 0) {// [1,0,-1,0,-2,2]// -2 -1 0 0 1 2 // 剪枝:-1 2// 剪枝: 0 1// 因为只要 nums[k] nums[i] target那么 nums[i] 后面的数都是正数的话就一定 不符合条件了。cout nums[k] nums[i] endl;cout2级剪枝处理?endl;break;}// 对nums[i]去重if(i k1 nums[i] nums[i-1]) continue;left i 1;right nums.size() - 1;while(right left) {sum nums[k] nums[i] nums[left] nums[right];if((long)sum target) right--;else if((long)sum target) left;else {result.push_back(vectorint{nums[k],nums[i],nums[left],nums[right]});// 对nums[left] 和 nums[right] 去重while(right left nums[right] nums[right-1]) right--;while(right left nums[left] nums[left-1]) left;// 找到答案时双指针同时收缩right--;left;}}}}return result;}
};