
算法学习
文章平均质量分 82
为开发打基础的算法学习
_Tunan
I am coding in 优快云.
展开
-
力扣刷题(二)—— 链表部分
文章目录1、首先要掌握2、21题合并两个有序链表3、83题删除链表中的重复元素4、141题环形链表5、203题移除链表元素6、206题反转链表1、首先要掌握链表包括单链表、双链表和环形链表,环形链表可以解决约瑟夫问题。链表的入口称为头节点head。插入/删除时间复杂度查询时间复杂度适用场景数组O(n)O(1)数据量固定,频繁查询,较少增删链表O(1)O(n)数据量不固定,频繁增删,较少查询2、21题合并两个有序链表将两个升序链表合并为一个新的 升序原创 2021-09-21 11:00:06 · 206 阅读 · 0 评论 -
力扣刷题(一)——数组部分
使用练习二级标题 字体强调内容 双星号斜体 单星号删除线 双波浪线有序列表回车自动生成1+空格无序列表加号+空格Ctrl+T自动生成列表,选择对应的行列数二级标题分割线 三个-加回车插入本地图片拖入即可[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NAb0TaMB-1631672845821)(C:\Users\Tunan\AppData\Roaming\Typora\原创 2021-09-16 15:33:04 · 488 阅读 · 0 评论 -
算法学习(十)——赫夫曼编码用于数据压缩
目录定长编码&变长编码赫夫曼编码介绍概念介绍实现流程代码实现定长编码&变长编码定长编码变长编码赫夫曼编码介绍概念介绍赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding), 又称霍夫曼编码, 是一种编码方式, 属于一种程序算法赫夫曼编码是赫哈夫曼树在电讯通信中的经典的应用之一。赫夫曼编码广泛地用于数据文件压缩。 其压缩率通常在 20%~90%之间赫夫曼码是可变字长编码(VLC)的一种。 Huffman 于 1952 年提出一种编码方法, 称之为最佳编码。实原创 2021-08-19 17:55:54 · 651 阅读 · 0 评论 -
算法学习(九)——查找算法汇总
目录标题插入算法介绍1.顺序(线性)查找顺序查找代码2.二分查找/折半查找二分查找代码3.插值查找插值插值代码4.斐波那契查找算法斐波那契查找代码插入算法介绍在Java中,我们常见的有四种方法:1)顺序(线性)查找2)二分查找/折半查找3)插值查找4)斐波那契查找下面我将逐一介绍1.顺序(线性)查找这个查找思路很简单,对要查找的序列进行循环匹配即可顺序查找代码//找到一個满足条件的就返回 public static int seqSearch(int[] arr, int value原创 2021-08-12 22:16:17 · 188 阅读 · 0 评论 -
算法学习(八)——排序算法汇总
文章目录注:完整代码请参见我的Github前言一、排序的分类二、算法学习1.冒泡排序(bubble sort)冒泡排序代码2.选择排序总结注:完整代码请参见我的GithubGithub链接前言排序也称排序算法(Sort Algorithm), 排序是将一组数据, 依指定的顺序进行排列的过程一、排序的分类1、内部排序指将需要处理的所有数据都加载到内部存储器(内存)中进行排序,这是程序员一般需要掌握的,也是面试中最常问到的一块。2、外部排序数据量过大, 无法全部加载到内存中, 需要借助.原创 2021-08-11 19:28:27 · 321 阅读 · 0 评论 -
算法学习(七)——回溯算法和八皇后问题
回溯(back tracking)算法是一种选优搜索法,又称为试探法、白话法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。这个问题的解题思路很有趣,充分应用了回溯算法,详解如下:1、在8*8的二维数组中,从第一行开始依次尝试,每行落原创 2021-08-05 20:47:26 · 243 阅读 · 0 评论 -
算法学习(六)—— 狄克斯特拉算法
系列文章目录第一章:二分查找及大O表示法第二章:选择排序第三章:递归和快速排序第四章:散列表第五章:广度优先搜索第六章:狄克斯特拉算法文章目录系列文章目录前言一、加权图前言 积累算法,记录学习一、加权图上一章介绍的图是没有权重的,即每一条边的意义一样,这样并不全面,因此引出一种加权图,这种图通常伴随的问题是最快路径问题...原创 2021-07-09 19:30:01 · 356 阅读 · 0 评论 -
算法学习(五)—— 广度优先搜索
系列文章目录第一章:二分查找及大O表示法第二章:选择排序第三章:递归和快速排序第四章:散列表第五章:广度优先搜索文章目录系列文章目录前言一、图简介二、广度优先搜索1、查找有无路径?2、查找最短路径3、队列三、代码实现1、实现图2、实现算法3、运行时间四、总结前言 积累算法,记录学习一、图简介图模拟一组连接。由节点(node)和边(edge)组成。比如《图解算法》中给出的生动例子,这个图指出欠钱关系,比如ALEX欠了EAMA的钱,RAME又欠了ADIT钱,以此类推。并且,一个原创 2021-07-07 19:37:47 · 8016 阅读 · 0 评论 -
算法学习(四)—— 散列表
系列文章目录第一章:二分查找及大O表示法第二章:选择排序第三章:递归和快速排序第四章:散列表文章目录系列文章目录前言一、散列表是什么二、散列表用途三、散列表内部机制1、冲突2、性能四、总结前言 积累算法,记录学习一、散列表是什么散列表是最有用的基本数据结构之一。前面所提及的简单查找和二分查找的运行时间分别是O(n)和O(logn),虽然二分查找已经很优美的节省时间了,但我们总期望查找时间更短,期望查找时间为0!!!因此散列表出现满足了我们的要求。从数据结构来看散列表:我们需要每原创 2021-07-06 19:53:57 · 584 阅读 · 0 评论 -
算法学习(三)—— 递归和快速排序
系列文章目录第一章:二分查找及大O表示法第二章:选择排序第三章:递归和快速排序文章目录系列文章目录前言一、递归1、基线条件和递归条件2、递归练习二、快速排序三、总结前言 积累算法,记录学习一、递归程序中的递归实现简单来说就是函数调用自己使用循环会使程序更加高效,但使用递归会使程序更易被理解。但是递归使用时候要注意一点,即停止条件,否则会使你的程序陷入无限循环中。1、基线条件和递归条件增加这两个条件的原因就是为了防止程序自己无限循环下去。比如:>>> def原创 2021-07-06 19:01:50 · 639 阅读 · 0 评论 -
算法学习(二)—— 选择排序
系列文章目录第一章:二分查找及大O表示法第二章:选择排序文章目录系列文章目录前言一、数组和链表1、链表2、数组二、选择排序3、总结前言积累算法,记录学习一、数组和链表1、链表链表中的元素可以储存在内存的任何地方。链表的每个元素都存储了下一个元素的地址,从而使一系列随机的内存地址串在一起。插入元素是链表的优势,因为它不需要进行元素的移动,只需要变动插入位置前后的地址索引即可。但是缺点也很明显,无法快速获取某个元素的位置,都需要从头进行索引查询。2、数组数组储存了一系列的数,而且你可原创 2021-07-05 20:42:11 · 436 阅读 · 0 评论 -
算法学习(一)—— 二分查找及大O表示法
算法学习第一章:二分查找及大O表示法文章目录算法学习前言一、二分查找二、大O表示法前言积累算法,记录学习一、二分查找相对于简单的傻瓜式搜索,二分查找是一种极大的节省时间的查找算法:二分查找是一种算法,其输入是一个有序的元素列表。如果要查找的元素包含在列表中,二分查找返回其位置;否则返回null。简单来说,二分查找每次都是从数据的中间进行搜索,比如你要从1~100中找一个数,你从50开始进行搜索,比较目标数与50,目标数大于50则再比较75,目标数小于50则再比较25,这样一来,不管是要比原创 2021-07-05 19:20:40 · 500 阅读 · 0 评论