算法应该是对的,py正式考试给10s。。现在只有1s
题目的解答方法试题中已经给出,主要考察实现,分三步:
排序
去重一
去重二
其中,个人认为判断子集,同级合并是难点(去重二),但是同级合并实际上有点类似2048,其实利用栈就很好理解了。
而判断子集:实际上就是 如果两个的ip前缀信息只看有效位(/后面数字的长度),如果相等,就是子集了
而同级合并:我认为是,如果两个的ip前缀信息只看有效位-1的,他们相等,就能合并了。。原因也比较简单
比如我门用一共长8位的ip地址来表示
1100 XXXX(前缀长度4) 11000000 11001111 192,207
1101 XXXX(前缀长度4) 11010000 11011111 208,237
显然他可以表示 110X XXXX,显然,它的ip地址是和1100 相等的
列表里0,1,2,3,4分别是ip第一位第二位第三位第四位,和ip前缀长度,列表[5]是ip地址对应的二进制数
def isSubSet(a,b):
#功能:判断b是a的子集,只需要看二者的前缀是否相等
if a[0]*16777216+a[1]*65536+a[2]*256+a[3]>>(32-a[4]) ==b[0]*16777216+b[1]*65536+b[2]*256+b[3]>>(32-a[4]):
return True
else:
return False
def union(a, b):
if a[4]!=b[4]:
return False
# 如果两个ip地

这篇博客探讨了CIDR合并算法的实现,重点在于排序、去重两步。作者指出判断子集的关键是对比有效位是否相等,而同级合并可以类比2048游戏,通过栈来理解和解决。文章还提供了具体的IP地址示例来解释同级合并的逻辑。
&spm=1001.2101.3001.5002&articleId=88563176&d=1&t=3&u=f85d6e8cb5dd4a4d86df90cae1da693d)
2123

被折叠的 条评论
为什么被折叠?



