算法
常见算法积累
wangfy_
这个作者很懒,什么都没留下…
展开
-
最长回文子串 - 中心扩散
【代码】最长回文子串 - 中心扩散。原创 2022-09-02 15:30:57 · 70 阅读 · 0 评论 -
二叉树插入元素
【代码】二叉树插入元素。原创 2022-10-03 17:17:01 · 175 阅读 · 0 评论 -
最长不重复串长度
【代码】最长不重复串长度。原创 2022-09-08 18:05:06 · 53 阅读 · 0 评论 -
输出司机和乘客重合的时间点
【代码】输出司机和乘客重合的时间点。原创 2022-09-08 18:01:02 · 62 阅读 · 0 评论 -
#### LRU算法 ####
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰。设计思路使用map+链表: 1)链表负责维护node的顺序。 2)map负责以O(1)的复杂度快速定位node在链表中的位置。具体的,map的key存node值,map的value存node的地址。当'node新增'或'访问node命中'时,放或移到链表头;当需要淘汰node时,淘汰链表尾的node。此时,新增、访问、移动、删除的时间复杂.....原创 2020-05-25 14:03:58 · 616 阅读 · 0 评论 -
#### LFU(least frequently used)最近最不经常使用算法 ####
部分内容摘自 https://leetcode-cn.com/problems/lfu-cache/solution/lfuhuan-cun-by-leetcode-solution/lfu问题get(int key)- 如果键key 存在于缓存中,则获取键的值,否则返回 -1 。put(int key, int value)- 如果键key 已存在,则变更其值;如果键不存在,请插入键值对。当缓存达到其容量capacity 时,则应该在插入新项之前,移除最不经常使用的项。在此问题中...转载 2022-03-14 17:22:11 · 470 阅读 · 0 评论 -
LeetCode:402. 移掉K位数字 (Medium)
题目给定一个以字符串表示的非负整数num,移除这个数中的k位数字,使得剩下的数字最小。https://leetcode-cn.com/problems/remove-k-digits/思路要想保证是最小数,必须是从左到右递增的,即:123456。使用单调栈:维护一个递增栈,但当前元素小于栈顶元素,则移掉栈顶元素实现string removeKdigits(string num, int k) { string res; int n=num....原创 2021-04-09 19:45:25 · 114 阅读 · 0 评论 -
不定人数的公平抽奖——蓄水池抽样思想
转自:https://huangjj27.gitlab.io/posts/fair-lottery/仅做个人备份,浏览请看原文题已知有无法确定的总人数N(人数太多)参与抽奖,要从中随机抽取k个中奖者,要求保证每个中奖者的被抽中的概率为k/N注意:本文所描述的公平是指每个人都以相同的概率被选中获奖过程取出前k个参与者放到奖池中 加入第n个参与者(k+1 <= n <= N),进行如下的步骤: 产生一个从1到n的随机数r 如果r <= k,则将第n个参与者.转载 2021-03-31 16:48:16 · 792 阅读 · 0 评论 -
#### 十大经典排序算法 ####
严重声明下文摘自:https://www.cnblogs.com/onepixel/p/7674659.htmlhttps://zhuanlan.zhihu.com/p/45188032仅做个人备份,略有修改,所以浏览请看原版原文目录0、算法概述1、冒泡排序(Bubble Sort)2、选择排序(Selection Sort)3、插入排序(Insertion Sort)4、希尔排序(Shell Sort)5、归并排序(Merge Sort)6、快速排序(.转载 2021-03-23 16:19:33 · 189 阅读 · 2 评论 -
快速排序
zjumooc#include <cstdio>const int MAXN = 1010;int a[MAXN] = {10,9,8,7,6,5,4,3,2,1};void swap(int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } int median3(int a[], int left...原创 2018-04-14 00:12:27 · 206 阅读 · 1 评论 -
M组N个元素的排序——多路归并排序
题有M个数组,每个数组含有N个元素,N个元素是从小到大有序的。要求你将这N*M个元素,从小到大排序到另外一个数组里。思路使用多路归并排序。因为【N个元素是从小到大有序】所以使用M个指针分别指向M个数组的起始元素,【此时的这M个元素分别是M个数组里最小的元素】,再寻找出这M个元素的最小元素就可以放到我们的目标数组里。"寻找出这M个元素的最小元素"方法(1)——遍历寻找出这M个元素的最小元素的时间复杂度:O(M多路归并的总体时间复杂度:每次遍历所有序列的当前元素,找到最小的。原创 2021-03-23 14:54:11 · 1230 阅读 · 0 评论 -
#### 堆及堆排序 ####
堆排序是一种树形选择排序。堆是由arr[]构成的完全二叉树,根结点arr[i]、根结点的左子树arr[2 * i]、右子树arr[2 * i + 1]。建堆:内层往下,外层往上 堆中插入节点:将插入的新节点放在堆末端,然后对此结点往上调整 堆中删除节点:删除堆顶时,将堆的最后一个元素与堆顶交换,然后对根结点往下调整 堆排序:不断删除(即上面第3点)并输出堆顶节点建大顶堆:publ...原创 2019-01-31 12:58:08 · 156 阅读 · 0 评论 -
转:对比【二叉查找树、平衡二叉树、红黑树、B-/B+树】
转自:https://blog.csdn.net/z702143700/article/details/49079107仅做个人备份,浏览请看原文前言:BST、AVL、RBT、B-tree都是查找树,查找时间基本都在O(logN)数量级上。下面做出详细对比。1. 二叉查找树 (Binary Search Tree)概念二叉查找树又称二叉搜索树,二叉排序树,特点如下:1. 左子树上所有结点值均小于根结点2. 右子树上所有结点值均大于根结点3. 结点的左右子树本身又是一颗二叉查找.转载 2021-03-09 20:17:49 · 158 阅读 · 0 评论 -
转:B树和B+树的插入、删除
转自:https://blog.csdn.net/qq_26222859/article/details/80631121?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonec转载 2020-06-10 21:24:38 · 195 阅读 · 0 评论 -
数组的第k大数
遍历每个元素,与k位排序数组的第一位比较,如果大于排序数组的第一位,则替换之并重排序。注意如果排序数组不足k位,则先补足k位。时间复杂度:O(n * (k的平方))原创 2020-07-06 00:45:53 · 821 阅读 · 0 评论 -
堆排序算法题:千万条记录的数组找 TopMax100
构建一个 100 元素的小顶堆,然后遍历数组,如果当前遍历的元素大于堆顶元素的时候就取代堆顶元素,然后对新堆顶元素进行向下调整。时间复杂度:O(nlog100)空间复杂度:100原创 2020-07-06 00:17:36 · 367 阅读 · 0 评论