• 【python】算法与数据结构例题


    目录

     

    算法与数据结构实验题 6.33 集合

    算法与数据结构实验题 6.34 路径


     

    算法与数据结构实验题 6.33 集合

    ★实验任务

    给你一个集合,一开始是个空集,有如下两种操作:

    1. 向集合中插入一个元素。

    2. 询问集合中最接近某个数的数是多少。

    ★数据输入

    输入第一行为一个正整数N,表示共有N个操作。

    接下来N行,每行一个操作。

    对于第一个操作,输入格式为1 x,表示往集合里插入一个值为x的元素。

    对于第二个操作,输入格式为2 x,表示询问集合中最接近x的元素是什么。

    1<=N<=100000,1<=x<=1000000000。

    ★数据输出

    对于所有的第二个操作,输出一个或者两个整数,表示最接近x的元素,有两个数的情况,按照升序输出,并用一个空格隔开。

    如果集合为空,输出一行“Empty!”

    数据保证插入的元素两两不同。

    ★代码实现

    1. def find(i:int):
    2. if not my_set:
    3. print('Empty!')
    4. return
    5. if i in my_set:
    6. print(i)
    7. return
    8. for k in my_set:
    9. my_list.append(abs(i-k))
    10. k=min(my_list)
    11. if (i-k) in my_set:
    12. print(i-k,end=' ')
    13. if (i+k) in my_set:
    14. print(i+k)
    15. my_set=set()
    16. num=int (input())
    17. while num:
    18. num-=1
    19. my_list=[]
    20. cont = [int(n) for n in (input().split())]
    21. if cont[0]==1:
    22. my_set.add(cont[1])
    23. else:
    24. find(cont[1])

     

    算法与数据结构实验题 6.34 路径

    ★实验任务

    给你一颗空的 AVL 树,你需要完成两个操作:

    1. 向树中插入一个元素。

    2. 询问某个元素到根的路径。

    PS:在任意时刻,这样的 AVL 树是唯一的。

    ★数据输入

    输入第一行为一个正整数 N,表示共有 N 个操作。

    接下来 N 行,每行一个操作。

    对于第一个操作,输入格式为 1 x,表示往集合里插入一个值为 x 的元素。

    对于第二个操作,输入格式为 2 x,表示询问根到 x 这个元素的路径。

    1<=N<=100000,1<=x<=1000000000。

    ★数据输出

    对于所有的第二个操作,输出一行若干个整数,表示根到 x 的路径序列,数与数之间用空格隔开。

    题目保证每个数最多只会插入一次,并且保证询问的数在之前已经插入过。

    输入示例
    5
    1 2
    1 1
    1 3
    2 1
    2 3
    输出示例
    2 1
    2 3

    ★代码实现

    1. class Node(object):
    2. def __init__(self, val):
    3. self.val = val
    4. self.lchild = None
    5. self.rchild = None
    6. class tn():
    7. def __init__(self):
    8. self.num=0
    9. class TreeNode():
    10. def height(self, root):
    11. if root == None:
    12. return 0
    13. else:
    14. return root.height
    15. def LL(self, root):
    16. node = root.lchild
    17. root.lchild = node.rchild
    18. node.rchild = root
    19. root.height = max(self.height(root.lchild), self.height(root.rchild)) + 1
    20. node.height = max(self.height(node.lchild), self.height(root.rchild)) + 1
    21. return node
    22. def RR(self, root):
    23. node = root.rchild
    24. root.rchild = node.lchild
    25. node.lchild = root
    26. root.height = max(self.height(root.rchild), self.height(root.lchild)) + 1
    27. node.height = max(self.height(node.lchild), self.height(root.rchild)) + 1
    28. return node
    29. def LR(self, root):
    30. root.lchild = self.RR(root.lchild)
    31. return self.LL(root)
    32. def RL(self, root):
    33. root.rchild = self.LL(root.rchild)
    34. return self.RR(root)
    35. def insert(self, root, val):
    36. if root == None:
    37. root = Node(val)
    38. else:
    39. if val < root.val:
    40. root.lchild = self.insert(root.lchild, val)
    41. if abs(self.height(root.lchild) - self.height(root.rchild)) > 1:
    42. if val < root.lchild.val:
    43. root = self.LL(root)
    44. else:
    45. root = self.LR(root)
    46. else:
    47. root.rchild = self.insert(root.rchild, val)
    48. if abs(self.height(root.lchild) - self.height(root.rchild)) > 1:
    49. if val > root.rchild.val:
    50. root = self.RR(root)
    51. else:
    52. root = self.RL(root)
    53. root.height = max(self.height(root.lchild), self.height(root.rchild)) + 1
    54. return root
    55. # 查询
    56. def find(self, root, val):
    57. if root.val == val:
    58. if T.num:
    59. print("", end=' ')
    60. print(root.val, end='')
    61. T.num -= 1
    62. return True
    63. else:
    64. if val < root.val:
    65. if T.num:
    66. print("",end=' ')
    67. print(root.val,end='')
    68. T.num-=1
    69. return self.find(root.lchild, val)
    70. else:
    71. if T.num:
    72. print("", end=' ')
    73. print(root.val, end='')
    74. T.num -= 1
    75. return self.find(root.rchild, val)
    76. T=tn()
    77. t = TreeNode()
    78. root = None
    79. num=int (input())
    80. while num:
    81. num-=1
    82. cont = [int(n) for n in (input().split())]
    83. if cont[0]==1:
    84. root = t.insert(root,cont[1])
    85. else:
    86. T.num=0
    87. t.find(root,cont[1])

    344cf4e9f2d9495f852795a3fd10811a.png

     

     

  • 相关阅读:
    VUE基础知识三:数组常用的操作函数
    R语言ggplot2可视化:可视化密度图(Density plot)、可视化多个分组的密度图、数据点分布在箱图中间、添加主标题、副标题、题注信息
    springboot毕设项目高校招生预报管理系统f10sf(java+VUE+Mybatis+Maven+Mysql)
    【JS进阶】防抖与节流
    java毕业设计财务信息管理mybatis+源码+调试部署+系统+数据库+lw
    mybatisPlus条件构造器常用方法
    Kafka 负载均衡在 vivo 的落地实践
    Linux——进程间通信——system V系列
    如何像优秀测试人员那样思考?
    ant使用第三方任务
  • 原文地址:https://blog.csdn.net/qq_63701832/article/details/127684566