社区
数据结构与算法
帖子详情
N个数中找三个数,使其和的绝对值最小
huochai2008
2010-07-11 06:26:54
难道只能枚举了?
...全文
570
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
找
出n
个
数
中
相差
最小
两
个
数
,并输出其差值的
绝对值
求n
个
数
中
最小
差值
绝对值
-
数
据结构题目 题目:给定n
个
数
,请
找
出其
中
相差(差的
绝对值
)
最小
的两
个
数
,输出它们的差值的
绝对值
。 算法思想:用比较的方法,通过差值的计算,逐
个
数
据地
找
出与当前元素
数
据差值
最小
的元素,再将差值的
绝对值
返回。 c++代码如下: #include <iostream> #include <stdlib.h> using namespace std; typedef struct LNode { struct LNode *prior; //指针
两
个
数
的和
最小
第二行输入n个整
数
ai(-10000
给出n
个
数
,
找
出这n
个
数
的最大值,
最小
值,和。
问题描述 给出n
个
数
,
找
出这n
个
数
的最大值,
最小
值,和。 输入格式 第一行为整
数
n,表示
数
的
个
数
。 第二行有n
个
数
,为给定的n
个
数
,每
个
数
的
绝对值
都小于10000。 输出格式 输出三行,每行一个整
数
。第一行表示这些
数
中
的最大值,第二行表示这些
数
中
的
最小
值,第三行表示这些
数
的和。 样例输入 5 1 3 -2 4 5 样例输出 5 -2 11
数
据规模与约定 1 <= n <= 10000。 解题思路:先将输入
个
数
的多少与输入
个
数
的大小解决,用
数
组包装每
个
数
,再定义一
个
数
值用来盛接最大值···,再判
数据结构与算法
33,025
社区成员
35,334
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章