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.输入输出格式为 ...
随机推荐
- 利用新浪云平台(SAE) 搭建 HUSTOJ 简易教程
前言: OnlineJudge(OJ)是一种代码在线判定平台,这里有许多的编程题目供你选择,你可以选择题目提交代码,OJ会自动返回你的代码的判定结果.是一种很方便的编程.算法练习平台.详情可见:百度百 ...
- 配置gosublime
Installation Sublime Package Control allows you to easily install or remove GoSublime (and many othe ...
- (转)有关Queue队列
Queue Queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递 基本FIFO队列 clas ...
- LED音乐频谱之概述
点击打开链接 转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/37929733 这个LED音乐频谱是我在学51单片机的 ...
- 打打基础,回头看看avr单片机的定时器、中断和PWM(转)
以前小看了定时器,发现这东西还真的很讲究,那先复习复习吧. 先提提中断:我的理解就是cpu执行时,遇到中断——根据对应的中断源(硬件或软件)——pc定位中断入口地址,然后根据这里的函数指针——跳转到相 ...
- Ubuntu16.04安装QQ(图文说明)
导读 最近,因为工作需要,我安装了Ubuntu16.04,然而有好多不便,工作上的事情大多需要QQ联系,然而在Ubuntu上的WebQQ很是不好用,于是在网上搜索了好多个linux版本的QQ,然而不是 ...
- phpcms替换类列表页,内容页,主页
phpcms替换类列表页,内容页,主页 利用phpcms制作企业站,首先要将静态的企业主页替换成后台可编辑的动态主页. 在phpcms/install_package/phpcms/templat ...
- 【BZOJ2726】[SDOI2012]任务安排 斜率优化+cdq分治
[BZOJ2726][SDOI2012]任务安排 Description 机器上有N个需要处理的任务,它们构成了一个序列.这些任务被标号为1到N,因此序列的排列为1,2,3...N.这N个任务被分成若 ...
- ArcGIS中的 .tpk数据
转:http://blog.csdn.net/mytudousi/article/details/33347249 什么是tpk文件 tpk是ArcGIS10.1推出的一种新的数据文件类型,主要是用于 ...
- Android得到SD卡文件夹大小以及删除文件夹操作
float cacheSize = dirSize(new File(Environment.getExternalStorageDirectory() + AppConstants.APP_CACH ...