
数据结构和算法
文章平均质量分 90
RichardGeek
一枚普通的乐于分享的程序猿博主
展开
-
数据结构与算法总览
数据结构总览原创 2022-09-05 15:00:33 · 2450 阅读 · 0 评论 -
数据结构-链表
链表的相关知识原创 2022-06-20 09:57:35 · 1022 阅读 · 1 评论 -
TopN问题
什么是TopN问题:给定一个很大的数据量n,要求从n中提取出最大/最小/重复频度最高的N个数(N相对于n较小,如n为10亿量级,而N为100)。 求topN在大数据中很常见,主要思路有三种: 1.先排序,在遍历出最大或最小的N个 2.通过大小堆,维持一个N个大小的堆,每次和堆顶元素比较,在堆化 3.中位数的中位数算法BFPRT 第一种,先排序,排序算法有很多,冒泡排序,快速排序等。时间复杂度是 O(n*log n),这里不详讲。 第二种,...原创 2021-02-22 19:33:17 · 6530 阅读 · 0 评论 -
LRU算法及实现
1.LRU算法是什么? LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法 选择最近最久未使用的数据予以淘汰。 除此之外,在redis缓存中也是用到了这种算法。redis有读写两个操作,然后缓存是有空间限制的,大小会有一定上线的, 2.算法来源 来自https://leetcode-cn.com/problems/lru-cache/ 运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制 。 实现 LRUCache 类: LRUCa原创 2021-02-20 17:40:31 · 419 阅读 · 0 评论 -
树的先序、中序、后序、层次遍历
二叉树的遍历 package com.lc.javabase; /** * @author liuchao02 * @ClassName: MyTree * @Description: 树 demo * @date 2021/2/22 17:02 */ public class MyTree { int转载 2021-02-22 17:45:40 · 775 阅读 · 0 评论 -
希尔排序(Shell Sort)
希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 希尔排序是把记录按下表的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键...原创 2019-07-29 16:50:15 · 255 阅读 · 0 评论 -
插入排序(Insertion Sort)
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 1、算法描述 一般来说,插入排序都采用in-plac...原创 2019-07-29 16:04:54 · 491 阅读 · 0 评论 -
选择排序(Selection Sort)
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻...原创 2019-07-29 15:16:05 · 187 阅读 · 0 评论 -
冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 1、算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最...原创 2019-07-29 14:50:57 · 207 阅读 · 0 评论 -
剑指Offer(java答案)
https://blog.youkuaiyun.com/sinat_29912455/article/details/51137349转载 2019-01-09 15:34:13 · 670 阅读 · 0 评论 -
二分查找
1, 需要先把arr排序 2,找到该值在数组中的下标 3,注意:代码中的判断条件必须是while (start<= end),否则的话判断条件不完整,比如:array[3] = {1, 3, 5};待查找的键为5,此时在(start< end)条件下就会找不到,因为start和end相等时,指向元素5,但是此时条件不成立,没有进入while()中。 public static ...原创 2019-01-09 15:28:27 · 163 阅读 · 0 评论 -
背包问题
01 背包 有n 种不同的物品,每个物品有两个属性,size 体积,value 价值,现在给一个容量为 w 的背包,问最多可带走多少价值的物品。 [cpp] view plain copy int f[w+1]; //f[x] 表示背包容量为x 时的最大价值 for (int i=0; i for (int j=转载 2018-01-04 16:49:37 · 818 阅读 · 0 评论