<span>[每日一题2020.06.23]leetcode #16 双指针</span>

https://leetcode-cn.com/problems/3sum-closest/submissions/

先对数组进行排序 $ O(nlogn) $ , 然后遍历 + 双指针 $ O (n^2) $

int threeSumClosest(vector<int>& nums, int target) {
	sort(nums.begin(), nums.end());
	int absans = 0x3f3f3f3f;
	int sum = 0;
	for (int i = 0; i < nums.size(); ++i)
	{
		int l = i + 1;
		int r = nums.size() - 1;
		while (l < r) {
			int tmpsum = nums[i] + nums[l] + nums[r];
			int tmpabs = abs(tmpsum - target);
			if(tmpabs < absans){
				sum = tmpsum;
				absans = tmpabs;
			}
			if (tmpabs == 0) return sum;
			else if (tmpsum < target) l++;
			else if (tmpsum > target) r--;
		}
	}
	return sum;
}
全部评论

相关推荐

10-30 16:31
重庆大学 Java
代码飞升:你说你善于学习,大家都会说。你说你是985,985会替你表达一切
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务