LeetCode算法题——15. 3Sum
来源:互联网 发布:理科生 禅师 知乎 编辑:程序博客网 时间:2024/06/06 21:04
题目:
Given an array S of n integers, are there elements a, b, c in S such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.
Note: The solution set must not contain duplicate triplets.
For example, given array S = [-1, 0, 1, 2, -1, -4],
A solution set is:
[
[-1, 0, 1],
[-1, -1, 2]
[
[-1, 0, 1],
[-1, -1, 2]
]
算法思想:
可以采用三层for直接搜索结果,此时算法复杂度为O(n^3),出现超时的错误,此时先对原始数据进行排序,先固定一个数,然后将3Sum可转换为2Sum问题,即寻找数组中满足两个数之和为target=0-第一个数的值,在2Sum问题中,定义首尾两个指针,判断该指针对应两个数的和,若大于target,则尾指针向前移动,小于target则首指针向后移动,知道尾指针小于或者等于首指针时,循环结束。且在其中需要去除重复出现的组合,此时当遇到与前一个相同的数字时,跳过改数字。
C++算法实现如下:
#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public: vector<vector<int> > threeSum(vector<int>& nums) { vector<vector<int> > result; bool flag; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size();i++){ if(i>0&&nums[i]==nums[i-1]) continue; int target=0-nums[i]; int j=i+1; int k=nums.size()-1; while(j<k){ if(nums[j]+nums[k]==target){ vector<int> temp; temp.push_back(nums[i]); temp.push_back(nums[j]); temp.push_back(nums[k]); result.push_back(temp); while (j < k && nums[j] == nums[j + 1]) ++j;//重复元素跳过 while (i < k && nums[k] == nums[k - 1]) --k; k--; j++; }else if(nums[j]+nums[k]>target){//两数之和大于目标值,则尾指针向前移动 k--; }else{ j++; } } } return result; }};int main(){ vector<vector<int> > result; int d[6]={-1, 0, 1, 0, 0, -4}; vector<int> data; for(int i=0;i<6;i++){ data.push_back(d[i]); } Solution sol; result=sol.threeSum(data); for(int i=0;i<result.size();i++){ for(int j=0;j<result[i].size();j++){ cout<<result[i][j]<<" "; } cout<<endl; }}
0 0
- LeetCode算法题——15. 3Sum
- LeetCode算法题——Two Sum
- LeetCode算法题——Two Sum
- LeetCode算法题——16. 3Sum Closest
- leetcode 3sum算法
- leetcode— 3Sum
- python写算法题:leetcode: 15. 3Sum
- LeetCode算法题——18. 4Sum
- LeetCode算法题——Combination Sum I & II
- LeetCode算法题——Minimum Path Sum
- LeetCode—**Combination Sum 利用DFS算法
- Sum—LeetCode-15 3Sum
- LeetCode——15. 3Sum
- 15.LeetCode——3Sum
- Leetcode——15. 3Sum
- leetcode 3 sum closest算法
- LeetCode算法题目:3Sum
- LeetCode —— 3SUM
- 伍蒙的c++作业3
- 记一次空指针异常
- C++第三次上机实验-个人所得税计算器
- Bootstrap 支持的JavaScript插件
- 十四、switch中可以传递的参数类型(Only convertible int values or enum constants are permitted)
- LeetCode算法题——15. 3Sum
- java基础,递归调用的初学总结
- 树莓派Raspberry Pi实战之命令行下实现USB存储设备自动挂载
- 远程连接Ubuntu14.04上的Mysql数据库
- 盒子模型-笔记
- 最简单的cmd批处理入门实例
- linux下find命令的应用
- mysql和workbench的安装、创建实例、用户
- 身份证号码验证算法