求数组两两之差绝对值最小值的O(n)算法
引理:数组每个元素加上某整数,数组两两之差绝对值不变。
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
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
...全文
相关推荐
经典面试题一
百度,腾讯,微软,谷歌校园招聘软件研发笔试题
算法设计与分析(第二版)王红梅,胡明 第一章课后答案
算法设计与分析(第二版)王红梅,胡明 第一章课后答案
华为面试180题(软件)
全新整理:微软、谷歌、百度等公司经典面试100题[第1-60题]
分治算法-求一个数组中的最大值和最小值
分治思想:将难以直接求解的大问题分解为k个相同的子问题;对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为k个子问题,如此递归的进行下去,直到问题规模足够小,很容易求出其解为止;
C#求n个数中最大值和最小值的方法
主要介绍了C#求n个数中最大值和最小值的方法,涉及C#中max及min方法的使用技巧,需要的朋友可以参考下


