@Pigmon
2016-04-29T14:11:55.000000Z
字数 658
阅读 925
Python
采用贪婪算法。
不失一般性,设左侧为街道起点,右侧为街道终点,即 H[1] 在街道左侧。
Algorithm PostOffice(H[]):
n <- Length(H);
P[] <- 存储所有邮局位置的数组
P[0] <- H[0] + 100;
LastPost <- P[0];
for (i in 1..n-1; j <- 0):
if Abs(H[i] - LastPost) <= 100:
continue;
else:
// 如果是最后一间房,邮局选址在当前房屋位置;
// 否则向右100米。
P[j] <- (i is n-1) ? H[i] : H[i] + 100;
LastPost <- P[j];
j++;
end
end
m <- Length(P); // 记录邮局总数
return P;
end
算法只是循环遍历一遍所有的房屋,令考察房屋位置 H[k]是否满足100米内有邮局的过程复杂度为,则算法整体时间复杂度为, n为 H[] 的长度。