![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
SkyXU123123
性格开朗、热爱学习的80后进步青年!
展开
-
判断三点共线?
最近在做地图寻路的时候需要优化路径,要判断多个点是否在一条直线上,如果在一条直线上则只保留起始点。已知平面上的三个点A(x1,y1)、B(x2,y2)、C(x3,y3),求判断它们是否在一条直线上?方法一:判断向量AB和向量AC的斜率是否相等。即(y2 - y1)/(x2 - x1) == (y3 - y1)/(x3 - x1).为了防止除数为零的问题可以把这个判断转成乘法:(y3 - y1) * (x2 - x1) - (y2 - y1) * (x3 - x1)==0方法二: 判断三角形ABC的.原创 2021-01-11 15:34:30 · 4597 阅读 · 0 评论 -
LRU算法
leet code: 146运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使用的数据值,从而为新的数据值留出空间使用哈希表+双向链表哈希表: 查询 O(1.原创 2020-09-07 14:33:41 · 110 阅读 · 0 评论 -
线性排序之基数排序
基数排序也是一种特殊的计数或者桶排序,比如有10万个手机号码从小到大排序,如果用桶排序则数值范围太大了显然不合适,这里我们可以对没一位进行计数排序(每一位数值范围都是0-9范围小很多),利用稳定的排序这样进行11次之后则完成排序,这里的基数则指每次排的那一位。基数排序的时间复杂度为O(k*n), 当k不大的时候,比如手机号排序,则时间复杂度接近于O(n).# 基数排序'''基数排序对要排序的数据是有要求的,需要可以分割出独立的“位”来比较,而且位之间有递进的关系,如果 a 数据的高位比 b 数据大,原创 2020-09-07 14:23:02 · 236 阅读 · 0 评论 -
线性排序之计数排序
计数排序其实是桶排序的一种特殊情况。当要排序的 n 个数据,所处的范围并不大的时候,比如最大值是 k,我们就可以把数据划分成 k 个桶。每个桶内的数据值都是相同的,省掉了桶内排序的时间。计数排序由于只涉及到数组的遍历操作,所以时间复杂度为O(n).'''计数排序(特殊的桶排序)适合处理元素数值范围不大的数据,每个桶内的数值都相同所以节省了对每个桶排序计数排序只能用在数据范围不大的场景中,如果数据范围 k 比要排序的数据 n 大很多,就不适合用计数排序了。而且,计数排序只能给非负整数排序,如果要排序的原创 2020-09-07 14:21:54 · 130 阅读 · 0 评论 -
线性排序之桶排序
桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有序的桶里,每个桶里的数据再单独进行排序。桶内排完序之后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了。# 桶排序 适合处理数据量大但数值范围分布均匀的数据,适合外部排序from typing import Listclass BucketSort(object): @staticmethod def bucketSort(arr:List[int], bucketSize: int):原创 2020-09-07 14:12:37 · 180 阅读 · 0 评论 -
经典排序算法之归并排序
python实现:'''// 归并排序算法, A是数组,n表示数组大小merge_sort(A, n) { merge_sort_c(A, 0, n-1)}// 递归调用函数merge_sort_c(A, p, r) { // 递归终止条件 if p >= r then return // 取p到r之间的中间位置q q = (p+r) / 2 // 分治递归 merge_sort_c(A, p, q) merge_sort_c(A, q+1, r)原创 2020-09-07 12:11:34 · 116 阅读 · 0 评论 -
二叉树遍历和深度
抽空整理了一下二叉树相关的算法,包括BFS和DFS(先序、中序、后序、递归非递归)以及最大深度和最小深度等。#-*- coding: utf-8 -*-'''二叉树相关'''class TreeNode: def __init__(self, val): self.val = val self.left = None self.right = None# DFS(深度遍历) 分为前序、中序、后序# 先序 递归def preor.原创 2020-07-01 15:04:36 · 130 阅读 · 0 评论