Python面试题【数据结构和算法部分161-200】

Python面试题【数据结构和算法部分161-200】

  • Python面试题【数据结构和算法部分161-200】

Python面试题【数据结构和算法部分161-200】

  1. 问题:如何在Python中找到最近公共祖先(LCA)?
    答案:
    class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Nonedef lowest_common_ancestor(root, p, q):if not root or root == p or root == q:return rootleft = lowest_common_ancestor(root.left, p, q)right = lowest_common_ancestor(root.right, p, q)if left and right:return rootreturn left if left else right
  1. 问题:如何在Python中实现计数质数的功能?
    答案:
    def count_primes(n):if n < 2:return 0primes = [True] * nprimes[0] = primes[1] = Falsefor i in range(2, int(n ** 0.5) + 1):if primes[i]:primes[i*i:n:i] = [False] * len(primes[i*i:n:i])return sum(primes)
  1. 问题:在Python中如何有效地实现斐波那契数列?
    答案:
    def fibonacci(n, memo={}):if n in memo:return memo[n]if n <= 2:return 1memo[n] = fibonacci(n-1, memo) + fibonacci(n-2, memo)return memo[n]
  1. 问题:如何在Python中实现一个简单的散列表?
    答案:
    class HashTable:def __init__(self):self.MAX = 100self.arr = [None for i in range(self.MAX)]def get_hash(self, key):h = 0for char in key:h += ord(char)return h % self.MAXdef add(self, key, value):h = self.get_hash(key)self.arr[h] = valuedef get(self, key):h = self.get_hash(key)return self.arr[h]
  1. 问题:Python中的动态规划是如何工作的?
    答案:
    动态规划是一种算法思想,用于解决具有重叠子问题和最优子结构特性的问题。通过将问题分解为更小的子问题,并存储这些子问题的解(通常是在一个数组或字典中),动态规划避免了重复计算子问题,从而提高了效率。
  1. 问题:如何在Python中找到数组中重复的数字?
    答案:
    def find_duplicates(nums):seen = set()duplicates = set()for num in nums:if num in seen:duplicates.add(num)else:seen.add(num)return list(duplicates)
  1. 问题:如何在Python中检测链表中的环?
    答案:
    class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef has_cycle(head):slow = headfast = headwhile fast and fast.next:slow = slow.nextfast = fast.next.nextif slow == fast:return Truereturn False
  1. 问题:在Python中如何使用递归进行二叉树的中序遍历?
    答案:
    def inorder_traversal(root):res = []def inorder(node):if not node:returninorder(node.left)res.append(node.val)inorder(node.right)inorder(root)return res
  1. 问题:如何在Python中合并两个有序链表?
    答案:
    class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef merge_two_lists(l1, l2):dummy = ListNode()tail = dummywhile l1 and l2:if l1.val < l2.val:tail.next, l1 = l1, l1.nextelse:tail.next, l2 = l2, l2.nexttail = tail.nexttail.next = l1 or l2return dummy.next
  1. 问题:如何在Python中找到字符串中的所有排列?
    答案:
    from itertools import permutationsdef all_permutations(s):return [''.join(p) for p in permutations(s)]
  1. 问题:如何在Python中使用动态规划求解背包问题?
    答案:
    def knapSack(W, wt, val, n):K = [[0 for x in range(W+1)] for x in range(n+1)]for i in range(n+1):for w in range(W+1):if i == 0 or w == 0:K[i][w] = 0elif wt[i-1] <= w:K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]],  K[i-1][w])else:K[i][w] = K[i-1][w]return K[n][W]
  1. 问题:在Python中如何实现二分查找树的删除操作?
    答案:
    class TreeNode:def __init__(self, key):self.left = Noneself.right = Noneself.val = keydef deleteNode(root, key):if root is None:return rootif key < root.val:root.left = deleteNode(root.left, key)elif(key > root.val):root.right = deleteNode(root.right, key)else:if root.left is None:temp = root.rightroot = Nonereturn tempelif root.right is None:temp = root.leftroot = Nonereturn temptemp = minValueNode(root.right)root.val = temp.valroot.right = deleteNode(root.right, temp.val)return rootdef minValueNode(node):current = nodewhile(current.left is not None):current = current.leftreturn current
  1. 问题:Python中如何实现图的拓扑排序?
    答案:
    from collections import defaultdictclass Graph:def __init__(self, vertices):self.graph = defaultdict(list)self.V = verticesdef addEdge(self, u, v):self.graph[u].append(v)def topologicalSortUtil(self, v, visited, stack):visited[v] = Truefor i in self.graph[v]:if visited[i] == False:self.topologicalSortUtil(i, visited, stack)stack.insert(0, v)def topologicalSort(self):visited = [False]*self.Vstack = []for i in range(self.V):if visited[i] == False:self.topologicalSortUtil(i, visited, stack)print(stack)
  1. 问题:如何在Python中找出数组中重复出现的所有元素?
    答案:
    def findDuplicates(nums):duplicates = []for num in nums:if nums[abs(num) - 1] < 0:duplicates.append(abs(num))else:nums[abs(num) - 1] *= -1return duplicates
  1. 问题:在Python中如何实现深度优先搜索(DFS)用于解决迷宫问题?
    答案:
    def solveMaze(maze):def dfs(x, y):if x < 0 or x >= len(maze) or y < 0 or y >= len(maze[0]) or maze[x][y] == 1:return Falseif maze[x][y] == 'E':return Truemaze[x][y] = 1if dfs(x+1, y) or dfs(x-1, y) or dfs(x, y+1) or dfs(x, y-1):return Truereturn Falsefor i in range(len(maze)):for j in range(len(maze[0])):if maze[i][j] == 'S':return dfs(i, j)return False
  1. 问题:Python中如何实现数组的旋转?
    答案:
    def rotate_array(nums, k):n = len(nums)k = k % nnums[:] = nums[n-k:] + nums[:n-k]
  1. 问题:如何在Python中实现链表排序?
    答案:
    class ListNode:def __init__(self, val=0, next=None):self.val = valself.next = nextdef sortList(head):if not head or not head.next:return headslow, fast = head, head.nextwhile fast and fast.next:slow = slow.nextfast = fast.next.nextmid = slow.nextslow.next = Noneleft, right = sortList(head), sortList(mid)return merge(left, right)def merge(l1, l2):dummy = ListNode(0)tail = dummywhile l1 and l2:if l1.val < l2.val:tail.next, l1 = l1, l1.nextelse:tail.next, l2 = l2, l2.nexttail = tail.nexttail.next = l1 or l2return dummy.next
  1. 问题:如何在Python中找到前K个高频元素?
    答案:
    import heapqfrom collections import Counterdef topKFrequent(nums, k):count = Counter(nums)return heapq.nlargest(k, count.keys(), key=count.get)
  1. 问题:在Python中如何实现两数之和?
    答案:
    def twoSum(nums, target):seen = {}for i, num in enumerate(nums):if target - num in seen:return [seen[target - num], i]seen[num] = i
  1. 问题:如何在Python中找到最小路径和?
    答案:
    def minPathSum(grid):for i in range(len(grid)):for j in range(len(grid[0])):if i == 0 and j == 0:continueelif i == 0:grid[i][j] += grid[i][j-1]elif j == 0:grid[i][j] += grid[i-1][j]else:grid[i][j] += min(grid[i-1][j], grid[i][j-1])return grid[-1][-1]
  1. 问题:如何在Python中实现一个最大堆?
    答案:
    import heapqclass MaxHeap:def __init__(self):self.heap = []def push(self, val):heapq.heappush(self.heap, -val)def pop(self):return -heapq.heappop(self.heap)def peek(self):return -self.heap[0]
  1. 问题:在Python中如何实现一个图的深度优先搜索(DFS)来检测环?
    答案:
    def detect_cycle_dfs(graph):def dfs(node, visited, rec_stack):visited[node] = Truerec_stack[node] = Truefor neighbour in graph[node]:if not visited[neighbour]:if dfs(neighbour, visited, rec_stack):return Trueelif rec_stack[neighbour]:return Truerec_stack[node] = Falsereturn Falsevisited = [False] * len(graph)rec_stack = [False] * len(graph)for node in range(len(graph)):if not visited[node]:if dfs(node, visited, rec_stack):return Truereturn False
  1. 问题:如何在Python中实现一个简单的LRU缓存?
    答案:
    from collections import OrderedDictclass LRUCache:def __init__(self, capacity: int):self.cache = OrderedDict()self.capacity = capacitydef get(self, key: int) -> int:if key not in self.cache:return -1else:self.cache.move_to_end(key)return self.cache[key]def put(self, key: int, value: int) -> None:if key in self.cache:self.cache.move_to_end(key)self.cache[key] = valueif len(self.cache) > self.capacity:self.cache.popitem(last=False)
  1. 问题:如何在Python中找到一个数组中的所有子集的和?
    答案:
    def subset_sums(arr):sums = [0]for num in arr:sums += [num + s for s in sums]return sums
  1. 问题:如何在Python中实现一个二叉树的后序遍历迭代器?
    答案:
    class BSTIterator:def __init__(self, root: TreeNode):self.stack = []self._leftmost_inorder(root)def _leftmost_inorder(self, root):while root:self.stack.append(root)root = root.leftdef next(self) -> int:topmost_node = self.stack.pop()if topmost_node.right:self._leftmost_inorder(topmost_node.right)return topmost_node.valdef hasNext(self) -> bool:return len(self.stack) > 0
  1. 问题:如何在Python中实现一个字符串的所有排列的迭代器?
    答案:
    from itertools import permutationsclass PermutationIterator:def __init__(self, string):self.permutations = permutations(string)self.index = 0def next(self):if self.index < len(self.permutations):result = ''.join(self.permutations[self.index])self.index += 1return resultelse:raise StopIterationdef hasNext(self):return self.index < len(self.permutations)
  1. 问题:如何在Python中实现一个简单的文本模式匹配算法?
    答案:
    def text_search(text, pattern):for i in range(len(text) - len(pattern) + 1):if text[i:i+len(pattern)] == pattern:return ireturn -1
  1. 问题:如何在Python中实现一个简单的加权图的Dijkstra算法?
    答案:
    import heapqdef dijkstra(graph, start):distances = {vertex: float('infinity') for vertex in graph}distances[start] = 0pq = [(0, start)]while pq:current_distance, current_vertex = heapq.heappop(pq)if current_distance > distances[current_vertex]:continuefor neighbor, weight in graph[current_vertex].items():distance = current_distance + weightif distance < distances[neighbor]:distances[neighbor] = distanceheapq.heappush(pq, (distance, neighbor))return distances
  1. 问题:如何在Python中实现一个简单的正则表达式匹配算法?
    答案:
    def is_match(text, pattern):if not pattern:return not textfirst_match = bool(text) and pattern[0] in {text[0], '.'}if len(pattern) >= 2 and pattern[1] == '*':return (is_match(text, pattern[2:]) orfirst_match and is_match(text[1:], pattern))else:return first_match and is_match(text[1:], pattern[1:])
  1. 问题:如何在Python中实现一个简单的表达式求值算法?
    答案:
    def evaluate_expression(expr):def calc(op, second, first):if op == '+': return first + secondif op == '-': return first - secondif op == '*': return first * secondif op == '/': return first // secondstack = []num = ''precedence = {'+': 1, '-': 1, '*': 2, '/': 2}operators = set('+-*/')for c in expr:if c.isdigit():num += celif c in operators:while (stack and stack[-1] in operators andprecedence[stack[-1]] >= precedence[c]):stack.append(calc(stack.pop(), stack.pop(), stack.pop()))stack.append(num)num = ''stack.append(c)if num:stack.append(num)while len(stack) > 1:stack.append(calc(stack.pop(), stack.pop(), stack.pop()))return stack[0]
  1. 问题:如何在Python中实现一个双向链表?
    答案:
    class ListNode:def __init__(self, value=0, prev=None, next=None):self.value = valueself.prev = prevself.next = nextclass DoublyLinkedList:def __init__(self):self.head = ListNode(0)self.tail = ListNode(0, self.head)self.head.next = self.taildef insert(self, value):node = ListNode(value, self.tail.prev, self.tail)self.tail.prev.next = nodeself.tail.prev = nodedef delete(self, node):node.prev.next = node.nextnode.next.prev = node.prev
  1. 问题:如何在Python中检测一个数组中是否存在重复元素?
    答案:
    def contains_duplicate(nums):return len(nums) != len(set(nums))
  1. 问题:在Python中如何实现一个基本的哈希映射?
    答案:
    class HashMap:def __init__(self):self.size = 1000self.table = [[] for _ in range(self.size)]def _hash(self, key):return hash(key) % self.sizedef put(self, key, value):hash_key = self._hash(key)for i, (k, v) in enumerate(self.table[hash_key]):if k == key:self.table[hash_key][i] = (key, value)returnself.table[hash_key].append((key, value))def get(self, key):hash_key = self._hash(key)for (k, v) in self.table[hash_key]:if k == key:return vreturn -1def remove(self, key):hash_key = self._hash(key)for i, (k, v) in enumerate(self.table[hash_key]):if k == key:del self.table[hash_key][i]
  1. 问题:如何在Python中实现快速幂算法?
    答案:
    def fast_power(base, power):result = 1while power > 0:if power % 2 == 1:result *= basebase *= basepower //= 2return result
  1. 问题:如何在Python中实现一个简单的字符串哈希函数?
    答案:
    def string_hash(s, mod):hash_val = 0p = 31p_power = 1for char in s:hash_val = (hash_val + (ord(char) - ord('a') + 1) * p_power) % modp_power = (p_power * p) % modreturn hash_val
  1. 问题:如何在Python中找到一个数的所有正因数?
    答案:
    def find_factors(n):factors = []for i in range(1, int(n**0.5)+1):if n % i == 0:factors.append(i)if i != n // i:factors.append(n // i)return factors
  1. 问题:如何在Python中实现一个简单的计算器解析器?
    答案:
    def calculate(s):num, stack, sign = 0, [], '+'for i in range(len(s)):if s[i].isdigit():num = num * 10 + int(s[i])if s[i] in '+-*/' or i == len(s)-1:if sign == '+':stack.append(num)elif sign == '-':stack.append(-num)elif sign == '*':stack.append(stack.pop() * num)else:stack.append(int(stack.pop() / num))num = 0sign = s[i]return sum(stack)
  1. 问题:如何在Python中实现二叉树的层序遍历?
    答案:
    from collections import dequedef level_order(root):if not root:return []result, queue = [], deque([root])while queue:level = []for _ in range(len(queue)):node = queue.popleft()level.append(node.val)if node.left:queue.append(node.left)if node.right:queue.append(node.right)result.append(level)return result
  1. 问题:如何在Python中实现一个简单的前缀和数组?
    答案:
    def prefix_sum(nums):prefix_sums = [0] * (len(nums) + 1)for i in range(len(nums)):prefix_sums[i+1] = prefix_sums[i] + nums[i]return prefix_sums
  1. 问题:如何在Python中实现一个简单的后缀和数组?
    答案:
    def suffix_sum(nums):suffix_sums = [0] * (len(nums) + 1)for i in range(len(nums)-1, -1, -1):suffix_sums[i] = suffix_sums[i+1] + nums[i]return suffix_sums

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/10040.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ECharts系列文章汇总(持续更新中)

ECharts介绍 ECharts是一款基于JavaScript的数据可视化图表库&#xff0c;提供了直观、生动、可交互、可个性化定制的数据可视化图表。以下是关于ECharts的详细介绍&#xff1a; 发展历程&#xff1a; ECharts最初由百度团队开源&#xff0c;并在2018年初捐赠给Apache基金会&…

解决PL/SQL中文乱码??????

三部解决pl/sql中文乱码问题 一、查询数据库字符集 语句&#xff1a;select userenv(language) from dual 二、设置环境变量 操作&#xff1a;计算机->属性->高级系统设置->环境变量->新建环境变量名NLS_LANG&#xff0c;值是第一步查询结果。 三、重启PL/SQL&a…

【C++阅览室】C++之Vector(容器)

目录 vector的介绍 vector的使用 vector的定义 vector iterator 的使用 vector 空间增长问题 vector 增删查改 vector 迭代器失效问题。&#xff08;重点&#xff09; vector的介绍 1、 vector 是表示可变大小数组的序列容器&#xff0c;可以使用连…

大语言模型的后处理

后处理的输入 常规意义上的大模型处理流程 import torch from transformers import LlamaForCausalLM, LlamaTokenizer# 加载模型和tokenizer model LlamaForCausalLM.from_pretrained("decapoda-research/llama-7b-hf") tokenizer LlamaTokenizer.from_pretrain…

【0002day】citespace知网教程

文章目录 1.建立路径2.数据转换3.数据分析 citespace这个也可以用来分析研究方向。 1.建立路径 首先建立四个文件夹。 2.数据转换 这一步需要导出知网数据&#xff0c;然后还要转换数据。 首先需要选中数据。 导出数据&#xff0c;refworks 将数据下载到input里。 转换…

grep中正则表达式

本文正则表达式主要是对 GNU Grep 3.11的章节的学习。标注特殊颜色的文字不需要太关注。 Regular Expressions A regular expression is a pattern that describes a set of strings. Regular expressions are constructed analogously to arithmetic expressions, by using v…

Linux 磁盘分区工具 gdisk / fdisk

fdisk 是传统的 Linux 磁盘分区工具&#xff0c;磁盘容量有2T的大小限制&#xff1b;gdisk 又叫 GPT fdisk, 作为 fdisk 的升级版&#xff0c;主要使用的是GPT分区类型&#xff0c;用来划分容量大于2T的硬盘&#xff0c;本文介绍使用方法。 简介 早期的磁盘使用 fdisk 工具分区…

C++ 多态 - 下

目录 1. 多态的原理 1.1. 虚函数表 1.2. 多态原理 1.3. 静态绑定和动态绑定 1.3.1. 运行时决议 1.3.2. 编译时决议 1.4. 为什么基类的对象调用虚函数不能构成多态 2. 单继承中的虚函数表 2.1. 同类型对象的虚表 2.2. 单继承的对象的虚表 2.2.1. 内存窗口查看 2.2.2…

[CISCN 2018]sm

目录 1.题目 3.解题 4.参考 1.题目 题目链接 from Crypto.Util.number import getPrime,long_to_bytes,bytes_to_long from Crypto.Cipher import AES import hashlib from random import randint def gen512num():order[]while len(order)!512:tmprandint(1,512)if tmp n…

【送书福利第六期】Java开发的150多个坑,你踩过几个?(文末送书)

文章目录 做Java开发别掉坑里还不知道 程序员为什么会掉到坑里却不自知&#xff1f;第一是意识不到坑的存在。第二是有些 bug 或问题只在特定情况下暴露。第三是变化不明显的性能问题。 《Java开发坑点解析&#xff1a;从根因分析到最佳实践》Java 开发完美避坑指南结语 &#…

2010-2022年ESA_ CCI-LC数据集下载

扫描文末二维码&#xff0c;关注微信公众号&#xff1a;ThsPool 后台回复 g009&#xff0c;领取 2010-2022年300m分辨率 ESA_ CCI-LC 数据集 哥白尼气候数据集&#xff1a;土地利用和土地覆盖研究的宝贵资源 &#x1f30d;&#x1f50d; 土地利用和土地覆盖变化是全球变化研究…

纯血鸿蒙APP实战开发——自定义安全键盘案例

介绍 金融类应用在密码输入时&#xff0c;一般会使用自定义安全键盘。本示例介绍如何使用TextInput组件实现自定义安全键盘场景&#xff0c;主要包括TextInput.customKeyboard绑定自定义键盘、自定义键盘布局和状态更新等知识点。 效果图预览 实现思路 1. 使用TextInput的cu…

docker安装nginx支持ssl 实现https访问(完整版)

全文目录,一步到位 1.前言简介1.1 专栏传送门1.1.1 本文简介 2. docker安装nginx支持ssl2.0 准备ssl证书(例: 阿里云)2.0.1 配置域名解析2.0.2 找到数字证书管理服务并签发ssl证书2.0.3 选择默认证书 填写域名 创建2.0.4 提交审核, 签发成功2.0.5 解压并上传到宿主机ssl路径下 …

异常处理/__LINE__ 与 __FILE__ 宏在调试和异常处理中的高级使用

文章目录 概述痛点分析_LINE_ 代码所在行号_LINE_ 直接转为字符串_LINE_ 作为整型数据使用_LINE_标记宏函数的调用位置 _FILE_ 代码所在文件名简单实验不期望 _FILE_ 宏代表全路径 assert 使用了 _FILE_ 和 _LINE_借助TLS技术小结 概述 _LINE_和_FILE_是C/C中的预定义宏&#…

HarmonyOS开发案例:【生活健康app之编写通用工具类】(5)

本节将介绍日志打印、时间换算等通用工具类的编写和使用&#xff0c;工具类可以简化应用代码编写和业务流程处理。 日志类 日志类Logger旨在提供一个全局的日志打印、日志管理的地方&#xff0c;既可以规范整个应用的日志打印&#xff0c;也方便日后对日志工具类进行修改&…

P1434 滑雪(java)

题目描述: Michael 喜欢滑雪。这并不奇怪&#xff0c;因为滑雪的确很刺激。可是为了获得速度&#xff0c;滑的区域必须向下倾斜&#xff0c;而且当你滑到坡底&#xff0c;你不得不再次走上坡或者等待升降机来载你。Michael 想知道在一个区域中最长的滑坡。区域由一个二维数组给…

利用106短信群发平台能否提升沟通效率?

利用106短信群发平台确实能够显著提升沟通效率&#xff0c;具体体现在以下几个方面&#xff1a; 1.快速传递信息&#xff1a;106短信群发平台能够实现信息的快速传递。一旦设置好发送内容和接收群体&#xff0c;短信便能在瞬间发送至大量用户。这种即时性确保了信息的迅速传达…

医院预约挂号系统微信小程序APP

医院预约挂号小程序&#xff0c;前端后台&#xff08;后台 java spring boot mysql&#xff09; 医院预约挂号系统具体功能介绍&#xff1a;展示医院信息、可以注册和登录&#xff0c; 预约挂号&#xff08;包含各个科室的预约&#xff0c;可以预约每个各个医生&#xff09;&…

java-spring 09 下.populateBean (方法成员变量的注入@Autowird,@Resource)

01.在populateBean 方法中的&#xff1a;用于Autowird&#xff0c;Resource注入 // 后处理器已经初始化boolean hasInstAwareBpps hasInstantiationAwareBeanPostProcessors();// 需要依赖检查boolean needsDepCheck (mbd.getDependencyCheck() ! AbstractBeanDefinition.DEP…