博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
20190116-将特定数字插入一个已经排序好的序列并且不改变其排序规则
阅读量:4567 次
发布时间:2019-06-08

本文共 2262 字,大约阅读时间需要 7 分钟。

1. 有一个已经排好序的列表。现输入一个数,要求按原来的规律将它插入列表中

分析:已经排好序的列表也可能是升序也可能是降序,需要先确定列表的排序方式以升序为例,需要考虑4主要种情况:

Case1:小于列表的第一个值,则插入第一个

如s=[2,3,4],插入1,则结果应该为[1,2,3,4],1插入的位置应该为第0个

Case2:处于区间

如s=[2,4,5]插入3,则结果应为[2,3,4,5],2插入的位置应该为2和3之间,index为s[0]和s[1]之间

Case3:大于列表的最后一个值

如s=[2,4,5]插入6,则结果应为[2,4,5,6],6插入的位置应该为最末尾,index为s[len(s)]

Case4:列表中有重复值且与插入值一样的情况

如s=[2,4,4,5]插入4,则结果应为[2,4,4,4,5],4插入的位置应该为两个4之间,所以在Case2的基础上需要在前面3个case的基础上考虑相等的情况

def insert_num_in_order(s,num):    result=[]    if s[0]
i and num>=s[i] and num
=s[i] and num <=s[i+1]的情况,则该条件会执行两次 #对应Case2,Case4的场景,i处于0到len(s)-1之间,如果i=len(s)的情况则s[i+1]会超出range           #此处还需考虑一个情况是[0,0,0,1,2]插入0的情况,因此elif条件中不能写成len(s)-1>i>0而是应该写成len(s)-1>i result.append(s[i]) result.append(num) elif i ==len(s)-1 and num>=s[i]: #此处对应case3,case4的场景 result.append(s[i]) result.append(num) else: #其他场景 result.append(s[i]) #print('result',result) else: #如果是降序 for i in range(len(s)): if i==0 and num>s[i]: result.append(num) result.append(s[i]) elif len(s)-1>i and num<=s[i] and num >s[i+1]: result.append(s[i]) result.append(num) elif i ==len(s)-1 and num<=s[i]: result.append(s[i]) result.append(num) else: result.append(s[i]) return result

需要特别注意的一点:因为要考虑序列中有2个以上相同的值,并且和插入的值相同的情况,以降序为例所以写条件的的时候len(s)-1>i and num<=s[i] and num >s[i+1]这3个条件缺一不可,否则会有多次执行的情况

#升序执行检查s = [0,0,1,2,3,4,5,6,7,8,9,10,10]print(s)print(insert_num_in_order(s,9))#执行结果#[0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9, 10, 10]print(insert_num_in_order(s,0))#执行结果#[0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10]print(insert_num_in_order(s,10))#执行结果#[0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10]#降序执行检查s1 = [10,10,9,8,7,6,5,4,3,2,1,1]print(s1)print(insert_num_in_order(s1,9))#执行结果#[10, 10, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1]print(insert_num_in_order(s1,1))#执行结果#[10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1, 1]print(insert_num_in_order(s1,10))#执行结果#[10, 10, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 1]

 

转载于:https://www.cnblogs.com/hyj691001/p/10279457.html

你可能感兴趣的文章
MySQL数据库迁移
查看>>
linux学习笔记3:linux的网络配置,rpm包,shell以及samba服务器的使用和安装
查看>>
推荐一款关于MongoDB日志分析的工具--Mtools
查看>>
Firefly 流程架构
查看>>
.assetbundle 和.unity3d 好处
查看>>
Untiy数据包的输出、加载和卸载
查看>>
asp.net mvc--传值-后台->前台
查看>>
C#-双问号运算符
查看>>
python第五十四天--第十周作业
查看>>
bzoj3208: 花神的秒题计划Ⅰ
查看>>
修改PL/SQL查询结果集中的日期date格式,禁止继承操作系统日期格式
查看>>
第8课 对象的方法
查看>>
vim编码相关
查看>>
通用分页二
查看>>
【linux高级程序设计】(第九章)进程间通信-管道 2
查看>>
【sqli-labs】Less18~Less22
查看>>
【编程之美】2.19 区间重合判断
查看>>
【leetcode】Combination Sum III(middle)
查看>>
【网络流24题】方格取数问题
查看>>
181. Employees Earning More Than Their Managers
查看>>