leetcode题解-15三数之和

三数之和:link

1.题目分析

首先想到的是固定两个数最后去确定第三个数,时间复杂度为O(n2logn),最好的方法是固定一个然后使用twoSum的方法去寻找那两个,时间复杂度为O(n2),注意事项为要跳过重复的。

2.示例代码
class Solution {
public:
	vector<vector<int>> threeSum(vector<int>& nums) {
		vector<vector<int>> ret;
		sort(nums.begin(), nums.end());
		for (int i = 0; i < (int)nums.size() - 2; ++i) {
			if (i == 0 || nums[i] != nums[i - 1]) {
				//find the combination
				int lo = i + 1, hi = nums.size() - 1;
				int twoSum = -nums[i];
				while (lo < hi) {
					if (nums[lo] + nums[hi] == twoSum) {
						ret.push_back({ nums[i], nums[lo], nums[hi] });
						while (lo < hi && nums[lo] == nums[lo + 1]) lo++;
						while (lo < hi && nums[hi] == nums[hi - 1]) hi--;
						lo++; hi--;
					}
					else if (nums[lo] + nums[hi] < twoSum) {
						lo++;
					}
					else {
						hi--;
					}
				}
			}
			else {
				//skip the duplications
				continue;
			}
		}
		return ret;
	}
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值