LeetCode(M)threesum
来源:互联网 发布:oppe软件商店 编辑:程序博客网 时间:2024/05/15 10:22
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]
]
class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { if(nums.size()<3) return{}; vector<vector<int>> v; sort(nums.begin(),nums.end()); for(int i=0;i<nums.size();++i){ int target=-nums[i]; if(target<0) break ; int j=i+1,k=nums.size()-1; while(j<k){ if(nums[j]+nums[k]==target){ v.push_back({nums[i],nums[j],nums[k]}); // while(j+1<k&&nums[j]==nums[j+1]) j++;while(j<k-1&&nums[k]==nums[k-1]) k--;//point1 int v1=nums[j],v2=nums[k]; while(j<k&&nums[j]==v1) j++;while(j<k&&nums[k]==v2) k--;//point2 } if(nums[j]+nums[k]<target) ++j; if(nums[j]+nums[k]>target) --k; } while(i+1<nums.size()&&nums[i]==nums[i+1]) i++;//pointA } return v; }};
在LintCode上写过这题,http://blog.csdn.net/jang1996/article/details/53780446
这次,在leetCode上超时了,加入point2、pointA两句才过。最开始我将point2写成point1,犯错了。
point1的意思是前一个数与后一个数相等,那么++或–;point2的意思是,在后面的数里,凡是和nums[j]或nums[k]相等的,都跳过,以免在v里重复。
0 0
- LeetCode(M)threesum
- LeetCode ThreeSum
- leetcode : threesum
- LeetCode(三)关于ThreeSum的实现
- LeetCode之ThreeSum
- [LeetCode]15.threeSum
- leetcode 15 threeSum
- threeSum
- threeSum
- threeSum
- Leetcode 之 twoSum, ThreeSum, FourSum(K-Sum)问题
- 算法练习专题——LeetCode系列之 ThreeSum
- LeetCode (M)
- LeetCode----406(M)、392(M)
- ThreeSum的问题
- [各种面试题] threesum
- threeSum and fourSum
- 【蓝桥第四周】ThreeSum
- 深入理解Java注解(Annotation)
- 版本控制工具git的安装与使用
- 生产者消费者模式(解决多线程容易死锁的一个方案)
- html布局总结
- WordPress获取所有页面的id函数: get_all_page_ids
- LeetCode(M)threesum
- 通过Guice 进行依赖项注入
- Essential C++第一章
- 1051. Pop Sequence
- 94. Binary Tree Inorder Traversal
- MYSQL,字符串连接,截取
- 秒杀 设计流程
- hdoj 1213
- Guice指南-架构概览