社区
数据结构与算法
帖子详情
N个数中找三个数,使其和的绝对值最小
huochai2008
2010-07-11 06:26:54
难道只能枚举了?
...全文
443
12
打赏
收藏
N个数中找三个数,使其和的绝对值最小
难道只能枚举了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
tsukuro
2010-07-14
打赏
举报
回复
2010Baidu百度知道开放平台
fanster28_
2010-07-12
打赏
举报
回复
O(n^2)可以解决,排序,设所选三个数为a<=b<=c
枚举b,
两端逼近,
i=1 j=n
while (i<j)
if s[i]>b or s[j]<b
break
if s[i]+s[j]>-b
j--
else
i++
注意中间记录最优解值就行了
wxc1987821
2010-07-12
打赏
举报
回复
mark
超级大笨狼
2010-07-12
打赏
举报
回复
O(n)时间内把数字分为A正,B负,和C0,长度分别是a,b,c
因为abc每个都有0或者大于0两种情况,所以2×2×2可能有8种情况
如果abc三者都大于0
O(a*b)时间内得到min(A+B)就是结果
如果只有正数或负数
挑选最小的三个O(n)内就可以。
总之,需要把8种Case考虑一遍。
复杂度不会超过O(a*b)
showjim
2010-07-12
打赏
举报
回复
将N个数分为正V、负S两个集合并分别排序,然后相互扫描,复杂度为V*log(V)+S*log(S)+2*V*S
fy1517
2010-07-12
打赏
举报
回复
大家都很强大 学习了
oyzdz1988
2010-07-12
打赏
举报
回复
没想到很好的解法,在网上找了下,感觉这个解决的不错~
http://hi.baidu.com/busycai/blog/item/53f2fb3810420ac8d562259d.html
softwarekid
2010-07-12
打赏
举报
回复
对不起楼主,ms只提高了一点点,不对的地方,还请指教。
枚举的复杂度是:C k 3 = O(k^3)
将k个数(假设有n个正数,m个负数)分为正数和负数,然后分别对正数和负数排序,快速排序为O(k^2)
-1 2 3 -5 6 0
排序完成后:
0 2 4 6
-5 -1
要想绝对值最小,三个数里面必有正数和负数。
当为一个负数时:
例如-5,-5与0相加,结果为正数则找剩余正数中的最小值;为负数则找与所得结果绝对值最相近的正数,折半查找 O(log n),有m个负数则就有:m*log(n)*n
当为两个负数,即为一个正数时,方法和为一个负数的情况相同。
最后再比较两个情况的最小值。
总的复杂度为O(m*log(n)*n)。
pmars
2010-07-12
打赏
举报
回复
留名……
michael122
2010-07-12
打赏
举报
回复
ls正解
跟寻找和为固定值的2个数的算法一样
花爺
2010-07-11
打赏
举报
回复
[Quote=引用楼主 huochai2008 的回复:]
难道只能枚举了?
[/Quote]
同意!
acdbxzyw
2010-07-11
打赏
举报
回复
ms是的吧。
【EMC笔试题】N个整
数
中
找
出
三个
数
,使其和的
绝对值
最小
题目描述:给定包含N
个
数
的无序
数
组S(可能包含负
数
,0,正
数
)。求
三个
数
A,B,C,使其和的
绝对值
最小
。例如:S={-9,0,1,3,6},A=-9,B=3,C=6,MIN=0算法解析:解法一:枚举3
个
数
,O(N*N*N)解法二:对S排序后枚举其
中
2
个
数
,二分查
找
另一
个
数
。O(N*N*LOGN)解法三:对S排序后枚举其
中
1
个
数
X,使用双向指针i,j从
数
组两端更新(注意剔除X)。根据S[I]+S[J]+X的正负号来更新I或J。若为负则I++,否则J--。一旦和为0即退出。同时根据每次得到的和来更新best。最
N
个
数
中
找
三个
数
,使其和的
绝对值
最小
--
原题: Write a function to find any subset of 3 integers from a set of N integers that have a sum with the smallest absolute value, and analyze the time and space complexity of your function. The input to this function is a pointer or reference to an a
Python算法——求
数
组
中
绝对值
最小
的
数
要求: 对于升序排列
数
组,
数
组
中
有正
数
、负
数
、或0,求
数
组
中
元素的
绝对值
最小
的
数
。例如
数
组[-10,-5,-2,7,15,50]
中
绝对值
最小
的
数
为-2。 分析: 方法一:顺序比较法 最简单的方法就是从头到尾遍历
数
组元素,对每
个
数
字求
绝对值
,然后比较就可以求出
绝对值
最小
的
数
。 方法二:二分法 求
绝对值
最小
的
数
分为三种情...
数
组:求
绝对值
最小
的
数
问题描述: 有一个升序排列的
数
组,
数
组
中
可能有正
数
,负
数
,0,求
数
组
中
元素的
绝对值
最小
的
数
。 分析: 分三种情况: 1)如果
数
组第一个元素为非负
数
,那么
绝对值
最小
的
数
肯定为
数
组的第一个元素。 2)如果
数
组的最后一个元素为负
数
,那么
绝对值
最小
的
数
肯定为
数
组的最后一个元素。 3)
数
组
中
既有正
数
又有负
数
时,首先
找
到正
数
与负
数
的分界点,如果分界点恰好为0,那么0就是
绝对值
最小
的
数
。否则比较分级...
python取
绝对值
数
组_Python算法——求
数
组
中
绝对值
最小
的
数
要求:对于升序排列
数
组,
数
组
中
有正
数
、负
数
、或0,求
数
组
中
元素的
绝对值
最小
的
数
。例如
数
组[-10,-5,-2,7,15,50]
中
绝对值
最小
的
数
为-2。分析:方法一:顺序比较法最简单的方法就是从头到尾遍历
数
组元素,对每
个
数
字求
绝对值
,然后比较就可以求出
绝对值
最小
的
数
。方法二:二分法求
绝对值
最小
的
数
分为三种情况:(1)如果
数
组
中
第一个元素为非负
数
,那么
绝对值
最小
的
数
肯定为
数
组第一个元素;(2)如果
数
组...
数据结构与算法
33,007
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章