往数列插入任意位置数的算法

danny posted @ 2012年10月29日 03:22 in defaults with tags code , 1705 阅读

这里仅以d=1,a1=1,s=100的情况

1...100

如果要插入3 39 49 50这几位,而相应的后续项则应当加上d,以便仍然形成新的数列。

只要求加一次的做法:首先得到要插入的数字个数m=4, 然后以插入数中最大数50开始,后续所有项(含本项)加上m, 插入数中第二大的到最大数之间的项加上m=3,依次类推

原数列1...100

新数列 1 2 3 4..38 39 40...48 49 50 51 52 53 54....100 101 102 103 104

越是后面的项(以插入数之后为基准),加得越多。

加四

原来的50变成54

加三

原来的49变成52

加二

原来的39变成41

加一

原来的3变成4

抽象一下。

插入a b c三项(用k表示插入项数,则有k=3),0<a<b<c,如果用i来遍历数列,那么会有

if i>=c; then i=i+k

if i<c && i>=b; then i=i+k-1

if i<b && i>=c;then i=i+k-2

写成代码,可以这样来:项作为位置参数,位置参数个数作为k,每换一次参数k就减1,直至遍历所有位置参数。

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter