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.输入输出格式为 ...
随机推荐
- hdu 1180:诡异的楼梯(BFS广搜)
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...
- MathType中怎么设置字体默认颜色
MathType功能非常强大,在编辑公式时使用非常方便.利用MathType破解版不仅可以改变公式的字体和字号,也可以改变公式字体颜色.有时在编辑完成后需要对MathType公式格式全部进行修改,这时 ...
- matlab获取图片的size属性,长宽
width=size(imread(‘文件名'),2): %获取图像宽length=size(imread(‘文件名'),1): %获取图像长 g=imread(['D:\文件及下载相关\桌面\代码 ...
- VC中的学习点滴
1. __stdcall 和 __cdecl __cdecl 是C Declaration的缩写(declaration,声明),表示C语言默认的函数调用方法:所有参数从右到左依次入栈,由调用者负责 ...
- ios 从URL中截取所包含的参数,并且以字典的形式返回和参数字典转URL
//字典转链接(参数) - (NSString *)keyValueStringWithDict:(NSDictionary *)dict { if (dict == nil) { return ni ...
- A*寻路算法(曼哈顿距离)
前一些天,在群有人问到A*算法的问题. 之前我已经有实现过,并将之放到github上(https://github.com/XJM2013/A_Star).有兴趣的能够下载下来看看. 这里上传了一个相 ...
- 复习及总结--.Net线程篇(3)
不幸的发现,原来多线程的东西还有好多. 不只是一个Thread就能把事情做完的,好吧,孤陋寡闻了 这里总结下 复习及总结--.Net线程篇(2)里的两个概念AppDomain和ThreadPool ...
- ArcGIS ArcMap 问题(ArcMap闪退、cx_oracle安装不上)
一.问题描述 1.ArcMap闪退 2.安装32位cx_oracle提示python目录不存在 二.解决方案 1.修改pythoncore的文件目录,指向C:\Python27\ArcGIS10.3\ ...
- 利用hugo生成静态站点
动机 使用Markdown撰写博客,并以静态页面形式发布. 选择hugo 现在jekyll似乎更加流行,但是jekyll是基于Ruby的,在windows下安装很繁琐. 而hugo是用go写的,win ...
- 《C++ Primer Plus》学习笔记0
Hello,World! 本书版本:<C++ Primer Plus(第6版)中文版>C++是在C语言基础上开发的一种集面向对象编程.泛型编程和过程化编程于一体的编程语言,是C语言的超集. ...