目录
文章目录
- 目录
- 顺序查找(依频率查找)
- 任务描述
- 计算器
- 链表的构造
- 线性表的构造
- 图遍历
顺序查找(依频率查找)
思路:用字典进行存储,考字典的操作
任务描述
本关任务:顺序查找是一种简单的查找算法,它遍历待查找的元素列表,按照元素出现的频次进行查找。给定一个包含 N 个整数的列表,设计一个 Python 算法,查找列表中出现频次最高的元素,并返回该元素。
def find_most_frequent_element(arr):########## Begin ##########dic = {}max_num = 0index = 0for i in arr:if i in dic:dic[i] = dic[i] + 1else:dic[i] = 1if max_num < dic[i]:index=imax_num = dic[i]return index########## End ########### 输入数据
N = int(input()) # "请输入列表中元素的个数:"
arr = list(map(int, input().split())) # 请输入N个用空格分隔的整数# 求解并输出结果
result = find_most_frequent_element(arr)
print("列表中出现频次最高的元素是:", result)
这里的i in dict中,i指的是字典中的key。
字典的循环:
for key in dict:
for key in book.keys():print(key)for value in book.values():print(value)
for item in dict.items():key=item[0]value=item[1]for key,value in dict.items ()
计算器
主要是考强制类型转换
class Solution:def solve(self, op, num_1, num_2):''':type op, num_1, num_2: str, int, int:rtype : Str'''#请在此添加代码,实现计算并返回表达式的结果,要求结果保留2位小数#********** Begin *********#if op=='+':result= num_1+num_2if op=='-':result= num_1-num_2if op=='*':result= num_1*num_2if op=='/':result= num_1/num_2return '%.2f'%result#********** End *********#
链表的构造
class Node:def __init__(self, value):self.value = valueself.next = Noneclass LinkedList:def __init__(self):self.head = Noneself.p=Nonedef add_node(self, value):########## Begin ##########node=Node(value)if self.head==None:self.head=nodeself.p=self.headelse:self.p.next=nodeself.p=node########## End ##########def print_list(self):current = self.headwhile current:print(current.value, end=" ")current = current.nextif __name__ == "__main__":# 获取用户输入的整数列表input_list = list(map(int, input().split())) # 请输入整数列表,以空格分隔# 构造链表linked_list = LinkedList()for num in input_list:linked_list.add_node(num)# 打印链表节点值linked_list.print_list() #链表的节点值
线性表的构造
思路:用列表list存储
class LinearList:def __init__(self):self.data = []def add_element(self, element):########## Begin ##########self.data.append(element)########## End ##########def get_element(self, index):########## Begin ##########if index<len(self.data):return self.data[index]else:return "Error: Index out of range."########## End ##########def remove_element(self, index):########## Begin ##########result=[]for i in range(len(self.data)):if i!=index:result.append(self.data[i])self.data=result########## End ########### 测试用例
if __name__ == "__main__":# 初始化线性表linear_list = LinearList()# 添加元素并输出linear_list.add_element(10)linear_list.add_element(20)linear_list.add_element(30)print(linear_list.get_element(0)) # 输出:10print(linear_list.get_element(2)) # 输出:30# 删除元素并输出linear_list.remove_element(1)print(linear_list.get_element(2)) # 输出:Error: Index out of range.
删除列表元素:
del list1[2]
图遍历
1.深度遍历
思路:
定义一个矩阵表示各个边之间的关系
定义一个数组存储表示是否遍历到所有的点(visited)
定义一个列表存储遍历到的点(result)
定义start表示出发的地点
基本想法:首先从start开始出发进行深度遍历(遍历矩阵中的start行,如果值为1且visited[start]为False,则将列下标存储到visited中。然后start从该下标开始重新遍历)
def dfs(adj_matrix, start, visited, result):########## Begin ##########num=adj_matrix[start]result.append(start)visited[start]=Trueindex=0while index<=len(adj_matrix[start]):for i in range(len(adj_matrix[start])):if adj_matrix[start][i]==1 and visited[i]==False:result.append(i)visited[i]=Truestart=ibreakindex=index+1for k in range(len(visited)):if visited[k]==False:for j in range(len(adj_matrix[k])):if adj_matrix[k][j]==1 and visited[j]==True:visited[k]=Trueresult.append(k)return result########## End ##########if __name__ == "__main__":N = int(input()) # 输入城市景点的数量adj_matrix = [list(map(int, input().split())) for _ in range(N)] # 输入邻接矩阵start = int(input()) # 输入起始景点的编号visited = [False] * Nresult = []dfs(adj_matrix, start - 1, visited, result)print(*[x + 1 for x in result]) # 输出深度优先遍历的结果