LeetCode---(18) 4 Sum
来源:互联网 发布:网络三国官网 编辑:程序博客网 时间:2024/03/29 04:32
Problem:
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:
- Elements in a quadruplet (a,b,c,d) must be in non-descending order. (ie, a ≤ b ≤ c ≤ d)
- 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)
class Solution {public: vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; result.clear(); if(nums.size()<4) return result; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size()-3;i++) { if(i>0&&nums[i]==nums[i-1]) continue; for(int j=i+1;j<nums.size()-2;j++) { if(j>i+1&&nums[j]==nums[j-1]) continue; int index1=j+1; int index2=nums.size()-1; while(index1<index2) { if(index1>j+1&&nums[index1]==nums[index1-1]) { index1++; continue; } if(index2<nums.size()-1&&nums[index2]==nums[index2+1]) { index2--; continue; } int sum=nums[i]+nums[j]+nums[index1]+nums[index2]; if(sum>target) index2--; else if(sum<target) index1++; else{ vector<int> mid; mid.push_back(nums[i]); mid.push_back(nums[j]); mid.push_back(nums[index1]); mid.push_back(nums[index2]); result.push_back(mid); index1++; } } } } return result; }};
K Sum求解方法, 适用leetcode 2Sum, 3Sum, 4Sum:
方法一: 暴力,就是枚举所有的K-subset, 那么这样的复杂度就是 从N选出K个,复杂度是O(N^K)
方法二: 排序,这个算法可以考虑最简单的case, 2sum,这是个经典问题,方法就是先排序,然后利用头尾指针找到两个数使得他们的和等于target
方法三: 使用哈希表 0 0
- LeetCode 18: 4Sum
- [leetcode 18] 4Sum
- [leetcode] 18 4Sum
- leetcode.18--------------4Sum
- leetcode 18 4Sum
- LeetCode---(18) 4 Sum
- LeetCode 18 - 4Sum
- LeetCode 18: 4Sum
- leetcode 18 -- 4Sum
- Leetcode[18]-4Sum
- leetcode-18 4Sum
- leetcode 18: 4Sum
- Leetcode#18 4Sum
- LeetCode(18) 4Sum
- LeetCode #18 4Sum
- Leetcode 18 4Sum
- LeetCode-18 4Sum
- Leetcode#18||4 Sum
- 认识多任务、多进程、单线程、多线程
- Java 用法
- HDU-1242——DFS+优先队列
- unity中JsonData中的json数据转换成普通数据类型的方法
- 【OpenCV】图像处理(一)平滑处理
- LeetCode---(18) 4 Sum
- IntelliJ Idea各种技巧设置笔记和错误解决
- linux 安装dubbo+zookeeper
- JNI搭建:native方法注册或NDK中的方法对应
- web.py中关于url的总结
- ZendGuardLoader
- 短信验证码自动填充
- 【c语言】自己的strncpy与库里的strncpy区别
- Leetcode Binary Tree Level Order Traversal II 二叉树分层遍历