求数组两两之差绝对值最小值的O(n)算法

中间件XL 中间件XL 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
引理:数组每个元素加上某整数,数组两两之差绝对值不变。
0: 设数组为a[n],遍厉a找到最小最大值min/max
for i=1 to n
a[i]=a[i]+(-min)+1; // 即令最小元素为1。
max=max+(-min)+1;
min=1;
令minABS=max-min+1
len=max-min;
1:
for i=1 to max
begin
遍厉数组,数组每个元素-1,并计算-1后数组元素0增加的个数zeroAdd.
len=len+1;
if zeroAdd>2 then minABS=0; 结束。
if zeroAdd=1 then
begin
if (len<minABS) then
minABS=len;
len=0;
end
end


...全文
评论 12
收藏 已收藏
分享
返回顶部
中间件XL
数据结构与算法 33,026 成员 35,334 内容