Python编程题总结
1 数学篇
1.1 斐波那契数列
def fib(n):
if n in (0, 1):
return n
fib_n1, fib_n2 = 0, 1
for i in range(2, n + 1):
fib_n2, fib_n1 = fib_n2 + fib_n1, fib_n2
return fib_n2
1.2 杨辉三角
def triangles():
l = [1]
while 1:
yield l
l = [1] + [l[n] + l[n + 1] for n in range(len(l) - 1)] + [1]
1.3 最大公约数
def gcd(x, y):
return x if (y == 0) else gcd(y, x % y)
1.4 最小公倍数
def gmd(x, y):
return x * y // gcd(x, y)
1.5 求幂运算
def my_power(x, n):
if n == 0:
return 1
if n < 0:
return 1.0 / my_power(x, -n)
tmp = my_power(x, n >> 1)
if n & 1:
return x * tmp * tmp
else:
return tmp * tmp
1.6 平方根
def binary_sqrt(x):
start, end = 0, x
while start <= end:
middle = (start + end) // 2
if x // middle == middle:
return middle
if x // middle > middle:
start = middle + 1
else:
end = middle - 1 def newton_sqrt(x):
result = x
while x // result < result:
result = (result + x // result) >> 1
return result
2 数组篇
2.1 数组中重复的数字
def duplicate(arr):
for i in range(0, len(arr)):
while arr[i] != i:
if arr[i] == arr[arr[i]]:
return arr[i]
else:
arr[i], arr[arr[i]] = arr[arr[i]], arr[i]
2.2 二维数组的查找
def find(matrix, target):
rows, cols = len(matrix), len(matrix[0])
row, col = 0, cols - 1
while row <= rows - 1 and col >= 0:
diff = matrix[row][col] - target
if diff == 0:
return True
elif diff > 0:
col -= 1
else:
row += 1
return False
2.3 旋转数组的最小数字
def find_min(arr):
left = 0
right = len(arr) - 1
if arr[left] < arr[right]:
return arr[left]
while left <= right:
middle = (left + right) >> 1
if arr[middle] == arr[left] and \
arr[middle] == arr[right]:
return arr_min(arr, left, right)
if arr[middle] > arr[left]:
left = middle
else:
right = middle
if left == right - 1:
break
return arr[right] def arr_min(arr, left, right):
result = arr[left]
for x in range(left, right + 1):
if arr[x] < result:
result = arr[x]
return result
2.4 数组中倒数第k大的数
def partion(arr, left, right):
# 快排获取索引
value = arr[right]
start = left
for i in range(left, right + 1):
if arr[i] < value:
if i != start:
arr[i], arr[start] = arr[start], arr[i]
start += 1
arr[right] = arr[start]
arr[start] = value
return start def krth_num(arr, k):
#倒数第k大的数
assert 1 <= k <= len(arr), 'Out of boundary.'
start = 0
end = len(arr) - 1
index = partion(arr, start, end)
while index != len(arr) - k:
if index > len(arr) - k:
end = index - 1
index = partion(arr, start, end)
else:
start = index + 1
index = partion(arr, start, end)
return arr[index]
2.5 连续子数组的最大和
3 链表篇
class ListNode:
def __init__(self):
self.value = 0
self.next = None
def print_list(self):
tmp = self
while tmp:
print(tmp.value)
tmp = tmp.next
3.1 从尾到头打印链表
def print_list_reverse(list_node):
arr = []
while list_node:
arr.append(list_node.value)
list_node = list_node.next
while arr:
print(arr.pop())
3.2 链表的反转
def reverse_list(root):
pre = None
while root:
next = root.next
root.next = pre
pre = root
root = next
return pre
3.3 合并两个排序的链表
def merge_list(root_a, root_b):
if not root_a:
return root_b
if not root_b:
return root_a
if root_a.value < root_b.value:
root = root_a
root.next = merge_list(root_a.next, root_b)
else:
root = root_b
root.next = merge_list(root_a, root_b.next)
return root
3.4 删除链表的节点
def delete_node(root, target):
if root is target:
root.next = None
return if target.next:
target.value = target.next.value
target.next = None
else:
while root.next is not target:
root = root.next
root.next = None
4 二叉树篇
class BinaryTreeNode:
def __init__(self, value = 0, left = None, right = None):
self.value = value
self.left, self.right = left, right def print_tree(self):
if self.left:
self.left.print_tree()
print(self.value)
if self.right:
self.right.print_tree()
4.1 重建二叉树
def rebult_tree(arr1, arr2):
return rebult_tree_rec(arr1, 0, len(arr1) - 1, arr2, 0, len(arr2) - 1) def rebult_tree_rec(arr1, left1, right1, arr2, left2, right2):
if left1 > right1 or left2 > right2:
return None
root = BinaryTreeNode()
root.value = arr1[left1]
index = arr2.index(arr1[left1])
root.left = rebult_tree_rec(arr1, left1 + 1, left1 + index - left2, arr2, left2, index - 1)
root.right = rebult_tree_rec(arr1, left1 + index - left2 + 1, right1, arr2, index + 1, right2)
return root
4.2 二叉树的下一个节点
class BinaryTreeNode:
def __init__(self):
self.value = 0
self.left, self.right = None, None
self.father = None def next_node(node):
if node.right:
node = node.right
while node.left:
node = node.left
return node
else:
while node.father:
if node.father.left is node:
return node.father
node = node.father
return None
4.3 二叉树的镜像
def mirror_tree(root):
if not root:
return
if not root.left and not root.right:
return
root.left, root.right = root.right, root.left
if root.left:
mirror_tree(root.left)
if root.right:
mirror_tree(root.right)
def is_sym_tree(root):
return is_sym(root, root)
def is_sym(root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.value != root2.value:
return False
return is_sym(root1.right, root2.left) and \
is_sym(root2.left, root1.right)
4.4 二叉树的深度
4.5 从上到下打印二叉树
def print_tree_up_down(root):
if not root:
return
queue_data = Queue()
queue_data.put(root)
while queue_data:
node = queue_data.get()
print(node.value)
if node.left:
queue_data.put(node.left)
if node.right:
queue_data.put(node.right)
4.6 二叉数的第k大节点
4.7 二叉搜索树与双向链表
class Solution:
@classmethod
def Convert(cls, pRootOfTree):
cls.linkedlistLast = None
cls.convertNode(pRootOfTree)
pHead = cls.linkedlistLast
while pHead.left:
pHead = pHead.left
return pHead @classmethod
def convertNode(cls, root):
if not root:
return
if root.left:
cls.convertNode(root.left)
root.left = cls.linkedlistLast
if cls.linkedlistLast:
cls.linkedlistLast.right = root
cls.linkedlistLast = root
if root.right:
cls.convertNode(root.right)
5 栈与队列
5.1 两个栈实现队列
class MyQueue:
stack1 = []
stack2 = [] def append_tail(self, item):
self.stack1.append(item) def delete_head(self):
while self.stack1:
self.stack2.append(self.stack1.pop())
return self.stack2.pop()
5.2 两个队列实现栈
class MyStack:
def __init__(self):
self.q1 = Queue()
self.q2 = Queue() def pop(self):
'''
弹出元素
'''
if self.q1.empty() and self.q2.empty():
raise BaseException('Empty queue.')
if self.q2.empty():
while self.q1.qsize() > 1:
self.q2.put(self.q1.get())
return self.q1.get()
if self.q1.empty():
while self.q2.qsize() > 1:
self.q1.put(self.q2.get())
return self.q2.get() def push(self, item):
'''
插入元素
'''
if self.q1.empty():
self.q2.put(item)
if self.q2.empty():
self.q1.put(item)
5.3 包含min/max函数的栈
class MyStack:
def __init__(self):
self.stack_data = []
self.stack_min = []
self.stack_max = [] def push(self, value):
self.stack_data.append(value)
if not self.stack_min or value < self.stack_min[-1]:
self.stack_min.append(value)
else:
self.stack_min.append(self.stack_min[-1]) if not self.stack_max or value > self.stack_max[-1]:
self.stack_max.append(value)
else:
self.stack_max.append(self.stack_max[-1]) def pop(self):
assert self.stack_min and self.stack_data
self.stack_data.pop()
self.stack_min.pop()
self.stack_max.pop() def min(self):
assert self.stack_min and self.stack_data
return self.stack_min[-1] def max(self):
assert self.stack_min and self.stack_data
return self.stack_max[-1]
Python编程题总结的更多相关文章
- 记一次面试过程中的Python编程题
这几天面试过程中遇到一道Python编程题,题目如下: 面试中遇到一个Python编程问题:一个字符串,将里面的数字取出来,如果第一个数字前面是+,表示整个数字为正数,如果第一个数字前面是-,表示数字 ...
- 运维笔试Python编程题
一.用Python语言把列表[1,3,5,7,9]倒序并将元素变为字符类型,请写出多种方法: 第一种方法: list = [1, 3, 5, 7, 9] list.reverse() list2 = ...
- python解无忧公主的数学时间编程题001.py
python解无忧公主的数学时间编程题001.py """ python解无忧公主的数学时间编程题001.py http://mp.weixin.qq.com/s?__b ...
- Python和Java编程题(一)
今天偶尔看到一个博客有贴了五十个编程题,决定以后两天左右做一道题 题目来源:http://blog.sina.com.cn/s/blog_60fafdda0100wb21.html 1.题目 一个数如 ...
- Python 编程规范-----转载
Python编程规范及性能优化 Ptyhon编程规范 编码 所有的 Python 脚本文件都应在文件头标上 # -*- coding:utf-8 -*- .设置编辑器,默认保存为 utf-8 格式. ...
- 书籍推荐Python编程:从入门到实践(高清完整pdf)
这本书我看了电子版的,感觉还不错,全书共有20章,书中的简介如下: 本书旨在让你尽快学会 Python ,以便能够编写能正确运行的程序 -- 游戏.数据可视化和 Web 应用程序,同时掌握让你终身受益 ...
- Python编程快速上手-让繁琐工作自动化-第二章习题及其答案
Python编程快速上手-让繁琐工作自动化-第二章习题及其答案 1.布尔数据类型的两个值是什么?如何拼写? 答:True和False,使用大写的T和大写的F,其他字母是小写. 2.3个布尔操作符是什么 ...
- 『编程题全队』Alpha 阶段冲刺博客Day8
1.每日站立式会议 1.会议照片 2.昨天已完成的工作统计 孙志威: 1.修复了看板任务框拖拽时候位置不够精确的问题 2.向个人界面下添加了工具栏 3.个人界面下添加了任务框测试 孙慧君: 1.个人任 ...
- python算法题 python123网站单元四题目
目录 一:二分法求平方根 二:Collatz猜想 三:算24(只考虑满足,不考虑把所有情况找出来) 下面向大家介绍几个python算法题. 一:二分法求平方根 1.题目要求为 2.输入输出格式为 ...
随机推荐
- 【mysql】一次有意思的数据库查询分析。
本文是在做一家汽车配件的电商网站时,大体情景是一个List.php页面,该页面分页列出部分配件并统计总数量用于分页. 当然该页面中也可以指定一下查询条件,如适配的车辆品牌.车系.排量.年份等,一件商品 ...
- ThinkPHP项目笔记之RBAC(权限)基础篇
今天,总结一下,RBAC(基于角色的访问控制),直白一点,就是权限管理.说到这,不得不“小叙”一下,我第一次 开发权限管理功能的“插曲”.第一次做这个,真的不会,我只知道“有点印象”,当时任务落到我的 ...
- java中main方法的 (String []args)
java中main方法的 (String []args) String[] args是main函数的形式参数,可以用来获取命令行用户输入进去的参数.java 本身不存在不带String ...
- Ubuntu16.04 Tomcat9的安装
1. 从http://tomcat.apache.org/download-90.cgi 下载apache-tomcat-9.0.0.M11.tar.gz 2. 上传到Linux后移动到/opt/to ...
- 《Java并发编程实战》第八章 线程池的使用 读书笔记
一.在任务与运行策略之间的隐性解耦 有些类型的任务须要明白地指定运行策略,包含: . 依赖性任务.依赖关系对运行策略造成约束.须要注意活跃性问题. 要求线程池足够大,确保任务都能放入. . 使用线程封 ...
- 1 week110的zookeeper的安装 + zookeeper提供少量数据的存储
随时查看,zookeeper企业里公认的最新文档版本! https://archive.apache.org/dist/ 下面是在weekend110上的zookeeper的安装 在 ...
- myeclipse10中对象无法点出下面的方法和属性
刚安装完最新的myeclipse4spring-10.6,发现通过对象无法点出下面的方法和属性,没有自动联想或自动补全,使用“Alt + /”也没得效果,解决方法如下: Window -> Pr ...
- 追踪溯源--抓住隐藏在NAT后面的罪犯
零.绪论: 水一篇,很小,只是一点思路记录,在工作中经常遇到的一类小问题.NAT后面的地址如何追查下去,推动网络整改不现实,总还要有一些手段来确认. 一.背景: 全球IPv4地址越来越少,也越来越贵, ...
- Objective-C代码学习大纲(1)
2011-05-11 14:06 佚名 otierney 字号:T | T 本文为台湾出版的<Objective-C学习大纲>的翻译文档,系统介绍了Objective-C代码,很多名词为台 ...
- java枚举类型(转载)
public class TestEnum { /*最普通的枚举*/ public enum ColorSelect { red, green, yellow, blu ...