目录


文章目录

  • 目录
  • 顺序查找(依频率查找)
  • 任务描述
  • 计算器
  • 链表的构造
  • 线性表的构造
  • 图遍历



顺序查找(依频率查找)

思路:用字典进行存储,考字典的操作

任务描述

本关任务:顺序查找是一种简单的查找算法,它遍历待查找的元素列表,按照元素出现的频次进行查找。给定一个包含 N 个整数的列表,设计一个 Python 算法,查找列表中出现频次最高的元素,并返回该元素。

def find_most_frequent_element(arr):
    ########## Begin ##########
    dic = {}
    max_num = 0
    index = 0
    for i in arr:
        if i in dic:
            dic[i] = dic[i] + 1
        else:
            dic[i] = 1
        if max_num < dic[i]:
            index=i
            max_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_2
        if op=='-':
            result= num_1-num_2

        if op=='*':
            result= num_1*num_2

        if op=='/':
            result= num_1/num_2
        return '%.2f'%result

        #********** End *********#

链表的构造

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None


class LinkedList:
    def __init__(self):
        self.head = None
        self.p=None


    def add_node(self, value):
        ########## Begin ##########
        node=Node(value)
        if self.head==None:
            self.head=node
            self.p=self.head
        else:
            self.p.next=node
            self.p=node
            

        


        ##########  End  ##########
        
    def print_list(self):
        current = self.head
        while current:
            print(current.value, end=" ")
            current = current.next


if __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))  # 输出:10
    print(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]=True
    index=0
    while 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]=True
                    start=i
                    break
            index=index+1

    for 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]=True
                    result.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] * N
    result = []
    dfs(adj_matrix, start - 1, visited, result)

    print(*[x + 1 for x in result])  # 输出深度优先遍历的结果

参加了计算机挑战杯,大题有一题函数题没有做出来。成功进入决赛。继续记录刷题哈哈哈哈