(面试题)求出两两之差绝对值最小的值

这是一个关于如何找出整数数组中两两之差绝对值最小值的问题,提出了四种不同的方法。方法1是两两作差求绝对值;方法2通过排序解决;方法3探讨了将问题转换为求解数组B中连续段和的绝对值最小值的可能性,但未完成;方法4采用计数排序,复杂度为O(n)。在提供的代码中,计数排序和相邻元素比较得到最小差值。该问题源自Microsoft的面试题。
摘要由CSDN通过智能技术生成

1.        有一个整数数组,请求出两两之差绝对值最小的值。记住,只要得出最小值即可,不需要求出是哪两个数。(Microsoft) 

方法1:两两作差求绝对值,并取最小,O( n2 )。

方法2:排序,相邻两点作差求绝对值,并取最小,O( nlgn ).

方法3:有没有O( n )的解法?(选择网络)

设数组A = { a1, a2, … , an }, 求 s = min( |ai - aj| ), 其中1<= i, j <=n.

设B = { b1, b2, … , bn-1 }, 且 bi = ai – ai+1

即:b1 = a1 – a2, b2 = a2 – a3, b3 = a3 – a4, …

 于是有如下规律:

例如:a3 – a5 = ( a3 – a4 ) + ( a4 – a5 ) =b3 + b4

a1 – a6

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值