18. 4Sum leetcode (array) 总结
来源:互联网 发布:最新网络流行词2017 编辑:程序博客网 时间:2024/05/01 10:01
4Sum
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]
]
对与3sum,3sumclosest,4sum都采用了以下的思路方法:
(1)对数据进行排序
(2)遍历剩余两个数据,均采用二分查找进行逼近;
(3)4sum中点考虑了采用set进行去重
/* 对数组排序 确定四元数中的前两个(a,b) 遍历剩余数组确定两外两个(c,d),确定cd时思路跟3Sum确定后两个数据一样,二分查找左右逼近。 在去重时采用set集合 */ vector<vector<int>> fourSum(vector<int>& nums, int target) { vector<vector<int>> result; set<vector<int>> setRes; int len = nums.size(); sort(nums.begin(),nums.end()); if(len < 4) { return (vector<vector<int>> ()); } /* for(int i = 0; i < len; i++) { for(int j = i + 1; j < len; j++) */ for(int i = 0; i < len - 3; i++) { for(int j = i + 1; j < len - 2; j++) { //二分查找 int begin = j + 1; int end = len -1; while(begin < end) { int sum = nums[i] + nums[j] + nums[begin] + nums[end]; if(sum == target) { vector<int> temp; temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(nums[begin]); temp.push_back(nums[end]); setRes.insert(temp); begin++; end--; } else if(sum > target) { end--; } else { begin++; } } } } set<vector<int>>::iterator iter; for(iter = setRes.begin(); iter!=setRes.end(); iter++) { result.push_back(*iter); } return result; }
0 0
- 18. 4Sum leetcode (array) 总结
- leetcode.array--18. 4Sum
- LeetCode[Array]---- 4Sum
- LeetCode--Array---4Sum
- 18. 4Sum--Array--LeetCode--C++
- LeetCode[Array]----3Sum
- 15.3sum leetcode(array)
- Leetcode - Pointers/Array - Two sum
- LeetCode[Array]----3Sum Closest
- LeetCode: Split Array Largest Sum
- 1.Two Sum leetcode(array)
- LeetCode-Array-1. Two Sum
- [Leetcode] Split Array Largest Sum
- LeetCode刷题【Array】 Two Sum
- leetcode.array--1. Two Sum
- Array -- Leetcode problem1. Two Sum
- leetcode.array--15. 3Sum
- leetcode.array--39. Combination Sum
- 在android里常用的默认开关的意义
- 双击退出
- 【u102】数列分段2
- shell脚本并发执行
- 1508-张晨曦总结《2016年-11月-28日》【连续38天总结】
- 18. 4Sum leetcode (array) 总结
- Android 进程和文件的UID/GID
- /etc/resolv.conf文件详解
- 教学视频两个图
- tarjan算法
- easyui datagrid 子网格的折叠问题(在展开一个子网格时折叠上一个展开的子网格)
- 统计信息失准导致CBO选错执行计划一例
- 从源码角度分析Android中UID与GID的分配
- linux 下终端下 代理设置 git proxy