博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode] 3Sum Closest
阅读量:6615 次
发布时间:2019-06-24

本文共 1933 字,大约阅读时间需要 6 分钟。

Given an array S of n integers, find three integers in S such that the sum is closest to a given number, target. Return the sum of the three integers. You may assume that each input would have exactly one solution.

For example, given array S = {-1 2 1 -4}, and target = 1. The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).

该题目与类似,但并不是列出所有和为0的三元组,而是找出与target最相近的sum,同样是利用三个指针i,p和q,具体请参考。只不过在遍历时记录最小误差minerror,最后返回target+minerror即可。

代码如下:

1 class Solution { 2 public: 3     int threeSumClosest(vector
&num, int target) 4 { 5 sort(num.begin(), num.end()); 6 int minerror = num[0]+num[1]+num[2] - target; 7 for( int i = 0 ; i < num.size() ; i++ ) 8 { 9 if( i > 0 && num[i] == num[i-1] )10 {11 continue;12 }13 int p = i+1;14 int q = num.size() - 1;15 while( p < q )16 {17 if( p > i +1 && num[p] == num[p-1] )18 {19 p++;20 continue;21 }22 23 if( q < num.size() -1 && num[q] == num[q+1] )24 {25 q--;26 continue;27 }28 29 int sum = num[i] + num[p] + num[q]; 30 31 if( abs(sum - target) < abs(minerror) )32 {33 minerror = sum - target;34 }35 36 if( sum - target == 0)37 {38 return target;39 }40 41 if( sum - target > 0 )42 {43 q--;44 }45 46 if( sum - target < 0 )47 {48 p++;49 }50 }51 }52 return minerror + target;53 }54 };

 

 

转载于:https://www.cnblogs.com/jostree/p/3691028.html

你可能感兴趣的文章
cg数据类型
查看>>
angularjs $http 服务
查看>>
离散卷积与自相关----------信号处理系列[原创]
查看>>
java 观察者模式
查看>>
Azure SQL Database (19) Stretch Database 概览
查看>>
VBA概述之在Office产品中创建自己的应用程序
查看>>
在C#中使用属性控件添加属性窗口
查看>>
linux内核驱动中对字符串的操作【转】
查看>>
delegate引用参数示例
查看>>
printf()详解之终极无惑
查看>>
交叉检验---训练数据,验证数据和测试数据
查看>>
Emacs中多个golang项目的配置方法
查看>>
Linux下的Backlight子系统(一)【转】
查看>>
AspNetPager分页控件配置
查看>>
【Android开发坑系列】之Fragment
查看>>
c++ 注册表的设置立即生效
查看>>
sql日期转换
查看>>
linux资源限制函数getrlimit,setrlimit(转载)【转】
查看>>
linux下热插拔事件的产生是怎样通知到用户空间,kobject_uevent_env之uevent【转】...
查看>>
备胎的养成记KeepAlived实现热备负载
查看>>