![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
剑指offer
剑指offer刷题记录
Shashank497
我要找到你,不管南北东西
展开
-
python实现牛顿法求二次根、三次根
公式:: k = n while abs(k*k-n)>1e-6: k = (k + n/k)/2 print(k)def cube_root(n): k = n while abs(k*k*k-n)>1e-6: k = k + (k*k*k-n)/3*k*k print(k)sqrt(2)cube_root(8)原创 2022-02-09 22:02:03 · 1003 阅读 · 0 评论 -
python实现二叉树层次遍历(BFS)
# 求二叉树路径DFSclass TreeNode: def __init__(self, val = None): self.left = None self.right = None self.val = valclass BTree: def insert(self,root,node): #构建二叉排序树 if root is None: return node if roo.原创 2022-01-23 22:28:02 · 1492 阅读 · 0 评论 -
python求二叉树所有路径(DFS)
# 求二叉树路径DFSclass TreeNode: def __init__(self, val = None): self.left = None self.right = None self.val = valclass BTree: def insert(self,root,node): #构建二叉排序树 if root is None: return node if root原创 2022-01-23 21:29:55 · 1342 阅读 · 0 评论 -
python合并有序链表(递归)
# 合并有序链表class ListNode: def __init__(self, value=None): self.value = value self.next = Nonedef Creat_Link_Tail(lst): head = ListNode(lst[0]) L = head for i in range(1, len(lst)): p = ListNode(lst[i]) L.nex.原创 2022-01-23 16:10:01 · 605 阅读 · 0 评论 -
python求最长回文子串
原理可参考链接:https://blog.csdn.net/sinat_35261315/article/details/78267046?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_aa&depth_1-utm_source=distribute.pc_relevant.none-task-blog-原创 2022-01-23 11:43:16 · 969 阅读 · 0 评论 -
python求链表中的循环头节点(快慢指针方法)
class LinkNode(): def __init__(self,value = None): self.value = value self.next = Nonedef Creat_Link_Tail(lst): L = LinkNode(lst[0]) first_node = L for i in range(1, len(lst)): if type(lst[i]) == int: p原创 2022-01-22 23:46:03 · 436 阅读 · 0 评论 -
python求二叉树深度(递归)
def tree_deep(root): if not root: return 0 #说明上一个节点是叶子节点,开始逐步返回 left, right = 0, 0 if root.left: left = tree_deep(root.left) #左子树递归 if root.right: right = tree_deep(root.right) #右子树递归 return max(left, right) + 1原创 2022-01-22 23:18:33 · 1425 阅读 · 0 评论 -
python实现快速幂
原理可参考:https://blog.csdn.net/qq_19782019/article/details/85621386'''@param base 底数@param power 指数@return res 求幂结果的最后3位数 '''def fast_power(base, power): res = 1 while power > 0: if power % 2 == 1: res = res * base % 1000原创 2022-01-22 22:23:29 · 1697 阅读 · 0 评论 -
python中@property和property()函数
前言@property是property()函数的语法糖(简便形式)在获取、设置和删除对象属性的时候,需要额外做一些工作。比如在游戏编程中,设置敌人死亡之后需要播放死亡动画。需要限制对象属性的设置和获取。比如用户年龄为只读,或者在设置用户年龄的时候有范围限制。这时就可以使用 property 工具,它把方法包装成属性,让方法可以以属性的形式被访问和调用。property()函数语法:property(fget=None, fset=None, fdel=None, doc=None) -&转载 2022-01-14 22:20:58 · 232 阅读 · 0 评论 -
python装饰器
函数装饰器import timedef decorator(func): def wrapper(*args, **kwargs): start_time = time.time() func() end_time = time.time() print(end_time - start_time) return wrapper@decoratordef fun(): time.sleep(0.8)fu原创 2022-01-14 21:44:17 · 296 阅读 · 1 评论 -
python的classmethod和staticmethod
静态方法(staticmethod)静态方法@staticmethod也是一个类方法,是可以直接类调用的。个人认为的使用场景是:只要要定义的方法里不涉及到self参数,就用静态方法承担。因为这样就表明这个方法和本身的类没有关系,明确的区别出类相关和不相关。class A: def __init__(self, a, b): self.a = a self.b = b def do_normal_something(self, a, b):原创 2022-01-13 21:33:37 · 510 阅读 · 0 评论 -
python中的__call__方法和其他类方法比较
call方法class A: def __init__(self, a, b): self.a = a self.b = b def __call__(self,a,b): print("123call",a,b)a = A(1,2)a(3,4) #相当于把实例变一个函数print(a.a,a.b)不得不引发出call和其他类方法的区别:实例化方法实例化的方法就是普通的类方法,它表达了类功能的多样性和抽象性,传入参数是se原创 2022-01-13 21:06:32 · 219 阅读 · 0 评论 -
python实现哈希表
# 实现hashtable,指定在key位置存入dataclass HashTable: def __init__(self): self.size = 11 self.slots = [None] * self.size # hold the key items self.data = [None] * self.size # hold the data values def hashfunction(self, key, size)原创 2022-01-13 20:43:16 · 1845 阅读 · 2 评论 -
python实现堆和堆排序
#堆heapclass heap(object): def __init__(self): self.data_list = [] def get_parent_index(self,index): if index==0 or index>len(self.data_list)-1: return None else: return (index-1)//2 def swap(.原创 2022-01-13 17:42:09 · 152 阅读 · 0 评论 -
python实现快速排序(QuickSort)
def Partition(lst,low,high): pivot = lst[low] while low<high: while low<high and lst[high]>=pivot: high -= 1 lst[low] = lst[high] while low<high and lst[low]<=pivot: low += 1 ls原创 2022-01-12 21:16:33 · 314 阅读 · 0 评论 -
python实现二叉排序树
#二叉排序树class BTree(): def __init__(self,data): self.left = None self.right = None if type(data) == list: self.data = data[0] for d in data[1:]: self.insert(d) else: sel原创 2022-01-12 17:29:01 · 1033 阅读 · 0 评论 -
python生成器和yield关键字
体验下列代码用于先体验普通列表推导式和生成器的差别:# def add():# temp = ["姓名", "学号", "班级", "电话"]# dic = {}# lst = []# for item in temp:# inp = input("请输入{}:".format(item))# if inp == "exit":# print("成功退出输入")# return原创 2022-01-12 14:59:07 · 227 阅读 · 0 评论 -
python迭代器
什么是迭代器迭代是python中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器对象从集合中的第一个元素开始访问,直到所有的元素被访问完。迭代器有两个方法:iter()和next()方法。可迭代的对象类似于list、tuple、str 等类型的数据可以使用for …… in…… 的循环遍历语法从其中依次拿到数据并进行使用,我们把这个过程称为遍历,也称迭代。python中可迭代的对象有原创 2022-01-12 14:15:57 · 189 阅读 · 0 评论 -
python实现k-means算法
# -*- coding:utf-8 -*-import randomimport numpy as npfrom matplotlib import pyplotclass K_Means(object): # k是分组数;tolerance‘中心点误差’;max_iter是迭代次数 def __init__(self, k=2, tolerance=0.0001, max_iter=300): self.k_ = k self.tolera.原创 2022-01-10 09:21:57 · 716 阅读 · 0 评论 -
python实现矩阵乘法
# 2 3 3 4# 1 2 3# 4 5 6# 1 2 3 4# 5 6 7 8# 9 10 11 12lst1, lst2 = [], []n1,m1,n2,m2 = map(int,input().split())for i in range(n1): nums = list(map(int,input().split())) #输入一行数据 lst1.append(nums)for i in range(n2): nums = list(map(int,i.原创 2022-01-08 13:36:13 · 1454 阅读 · 0 评论 -
numpy实现NMS
import numpy as npimport matplotlib.pyplot as pltdef py_cpu_nms(dets, thresh): x1 = dets[:, 0] y1 = dets[:, 1] x2 = dets[:, 2] y2 = dets[:, 3] scores = dets[:, 4] areas = (x2-x1+1)*(y2-y1+1) res = [] index = scores.argsort()[::原创 2022-01-08 10:57:53 · 1905 阅读 · 0 评论 -
BN(Batch Normalization)详解,包含pytorch实现、numpy实现
起源对于神经网络来说,如果每一层的数据分布都不一样,后一层的网络则需要去学习适应前一层的数据分布,这相当于去做了domian的adaptation,无疑增加了训练难度,尤其是网络越来越深的情况。BN的那篇论文中指出,不同层的数据分布会往激活函数的上限或者下限偏移。论文称这种偏移为internal Covariate Shift,internal指的是网络内部。BN就是为了解决偏移的,解决的方式也很简单,就是让每一层的分布都normalize到标准正太分布。我们在图像预处理过程中通常会对图像进行标准化原创 2022-01-06 11:01:00 · 3608 阅读 · 0 评论 -
python使用numpy实现卷积操作
python使用numpy实现卷积操作talk is cheap,show you the codeimport numpy as npdef Conv2(img, kernel, n, stride): #img:输入图片;kernel:卷积核值;n:卷积核大小为n*n;stride:步长。 #return:feature map h, w = img.shape img = np.pad(img,((1,1),(1,1)),'constant',constant_values原创 2021-12-29 16:14:48 · 3618 阅读 · 0 评论 -
【剑指offer】JZ24 反转链表 python
题目递归class ListNode: def __init__(self): self.val = None self.next = Nonedef creatlist_tail(lst): L = ListNode() first_node = L for item in lst: p = ListNode() p.val = item L.next = p L =原创 2022-01-02 11:00:29 · 553 阅读 · 0 评论 -
【剑指offer】JZ55 二叉树的深度 python
【剑指offer】JZ55 二叉树的深度题目1、层次遍历class TreeNode: def __init__(self, data=0): self.val = data self.left = None self.right = Noneclass Solution: def TreeDepth(self , pRoot: TreeNode) -> int: # write code here原创 2022-01-01 19:43:28 · 870 阅读 · 0 评论 -
JZ03 数组中重复的数字 python
JZ03 数组中重复的数字python1.暴力class Solution: def duplicate(self, numbers: List[int]) -> int: # write code here for i in range(len(numbers)): for j in range(len(numbers)): if numbers[i] == numbers [j]:原创 2021-12-30 21:07:45 · 449 阅读 · 0 评论 -
括号匹配 python
普通括号匹配python# 括号匹配def bracket_matching(ans): stack = [] flag = True left = ['(', '{', '['] right = [')', '}', ']'] for i in range(len(ans)): if ans[i] in left: stack.append(ans[i]) else: tmp =原创 2021-12-29 16:20:50 · 654 阅读 · 0 评论 -
二分查找 python
python# binary searchdef binary_search(lst, x): lst.sort() if len(lst) > 0: pivot = len(lst) // 2 if lst[pivot] == x: return True elif lst[pivot] > x: return binary_search(lst[:pivot], x)原创 2021-12-25 18:21:15 · 505 阅读 · 0 评论 -
【剑指offer】JZ9 用两个栈实现队列
题目python题解python的列表结合append和pop方法就可以看作是一个栈。# -*- coding:utf-8 -*-class Solution: def __init__(self): self.stack1 = [] self.stack2 = [] def push(self, node): # write code here self.stack1.append(node) def pop原创 2021-12-22 17:35:56 · 405 阅读 · 0 评论 -
【剑指offer】JZ6 从头到尾打印链表(Python)
题目python题解原创 2021-12-21 15:18:14 · 434 阅读 · 0 评论