
算法
文章平均质量分 94
hyyyya
在编程路上学习且奋斗的小学徒
展开
-
动态规划之习题分析
动态规划之习题分析一、动态规划的概念二、爬楼梯(一)、题目需求(二)、解法(三)、代码分析三、独一的道路一(一)、题目需求(二)、解法(三)、代码分析四、独一的道路二(一)、题目需求(二)、解法(三)、代码分析五、最长公共子序列(一)、题目需求(二)、解法(三)、代码分析六、单词拆分(一)、题目需求(二)、解法(三)、代码分析七、回文分割(一)、题目需求(二)、解法(三)、代码分析一、动态规划的概念 动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解原创 2021-01-11 14:48:15 · 309 阅读 · 0 评论 -
并查集之习题分析
并查集之习题分析一、并查集的概念二、并查集的数据结构以及代码分析(一)、并查集的数据结构(二)、并查集数据结构方法分析三、小岛问题(一)、题目需求(二)、解法(三)、代码分析一、并查集的概念 并查集,在一些有N个元素的集合应用问题中,我们通常是在开始时让每个元素构成一个单元素的集合,然后按一定顺序将属于同一组的元素所在的集合合并,其间要反复查找一个元素在哪个集合中。这一类问题近几年来反复出现在信息学的国际国内赛题中,其特点是看似并不复杂,但数据量极大,若用正常的数据结构来描述的话,往往在空间上过大,原创 2021-01-10 20:36:13 · 353 阅读 · 0 评论 -
字典树(trie)之习题分析
字典树(trie)之习题分析一、字典树(trie)的概念二、字典树(trie)的使用场景(一)、字符串检索(二)、文本预测、自动完成,see also,拼写检查(三)、词频统计(四)、排序(五)、字符串最长公共前缀(六)、字符串搜索的前缀匹配(七)、作为其他数据结构和算法的辅助结构三、如何实现trie(一)、题目需求(二)、解法(三)、代码分析四、添加与搜索单词 - 数据结构设计(一)、题目需求(二)、解法(三)、代码分析一、字典树(trie)的概念 字典树又称单词查找树,Trie树,是一种树形结构原创 2021-01-10 18:02:04 · 342 阅读 · 0 评论 -
字符串(String)之习题分析
字符串(String)之习题分析一、字符串的概念(一)、字符串的概念(二)、String的概念和特点(三)、StringBuffer的概念和特点(四)、StringBuilder的概念和特点(五)、总结二、字符串(String)的常见操作(一)、基本操作方法(二)、字符串的比较(三)、字符串与其他数据类型的转换(四)、字符串查找(五)、截取与拆分(六)、替换或修改三、逆转单词一(一)、题目需求(二)、解法(三)、代码分析四、逆转单词二(一)、题目需求(二)、解法(三)、代码分析五、罗马数字转为整数(一)、原创 2021-01-10 10:57:57 · 651 阅读 · 0 评论 -
深度优先搜索(DFS)之习题分析
深度优先搜索(DFS)之习题分析一、深度优先搜索(DFS)的概念二、全排列(一)、题目需求(二)、解法(三)、代码分析三、子集(一)、题目需求(二)、解法(三)、代码分析四、n皇后(一)、题目需求(二)、解法(三)、代码分析一、深度优先搜索(DFS)的概念 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。原创 2021-01-07 17:37:38 · 978 阅读 · 0 评论 -
宽度优先搜索(BFS)之习题分析
宽度优先搜索之习题分析一、宽度优先搜索的概念二、小岛问题(一)、题目需求(二)、解法(三)、代码分析三、单词梯(一)、题目需求(二)、解法(三)、代码分析一、宽度优先搜索的概念 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。 一般可以用它做什么呢?一个最直观经典的例子就是走迷宫,我们从起点开始,找出到终点的最短路程,很多最短路径算法就是基于广度优先的思想成立的。二、小岛问题原创 2021-01-06 20:43:52 · 1138 阅读 · 0 评论 -
散列(Hash)之习题分析
散列(Hash)之习题分析一、什么是散列(Hash)(一)、Hash的概念(二)、处理冲突的方法二、HashMap解析(一)、HashMap的概念(二)、HashMap的属性(三)、构造方法(四)、HashMap的常用方法1、put方法(1)、1.7以前(2)、1.7以后2、get方法3、resize方法(五)、底层数据分析1、1.7以前2、1.7以后三、子数组和等于K(一)、题目需求(二)、解法(三)、习题分析四、图的克隆(一)、题目需求(二)、解法1、Node类2、解法(三)、习题分析五、最长无重复的字原创 2021-01-06 19:27:26 · 823 阅读 · 0 评论 -
堆(优先队列)之习题分析
堆之习题分析一、堆以及优先队列的概念(一)、堆的概念(二)、优先队列——PriorityQueue1、优先队列的概念2、优先队列的数据结构3、优先队列的源码分析(1)、属性(2)、构造方法(3)、常用方法二、数据流的中位数(一)、题目需求(二)、解法(三)、代码分析三、第K大元素(一)、题目需求(二)、解法1、快速队列2、快速队列改进版3、优先队列(三)、代码分析一、堆以及优先队列的概念(一)、堆的概念严格来讲,堆有不同的种类,但是我们在算法学习中,主要用的还是二叉堆,而二叉堆有最大堆和最小堆之分。原创 2021-01-06 16:57:26 · 552 阅读 · 0 评论 -
排序之几大常见算法总结
排序之几大常见算法总结一、冒泡排序算法(一)、冒泡排序算法的概念(二)、冒泡排序算法的流程图(三)、冒泡排序算法的代码示例二、插入排序算法(一)、插入排序算法的概念(二)、插入排序算法的流程图(三)、插入排序算法的代码示例三、选择排序算法(一)、选择排序算法的概念(二)、选择排序算法的流程图(三)、选择排序算法的代码示例四、归并排序算法(一)、归并排序算法的概念(二)、归并排序算法的流程图(三)、归并排序算法的代码示例五、快速排序算法(一)、快速排序算法的概念(二)、快速排序算法的流程图(三)、快速排序算法原创 2020-12-15 20:19:22 · 184 阅读 · 0 评论 -
树之习题分析下
树的习题分析下一、二叉树的序列化与反序列化(一)、题目需求(二)、解法1、树结点类2、序列化解法3、反序列化解法(三)、代码分析1、序列化解法分析2、反序列化解法分析二、二叉树的右视角(一)、题目需求(二)、解法(三)、代码分析三、二叉树的最近公共祖先(一)、题目需求(二)、解法(三)、代码分析四、平衡二叉树(一)、题目需求(三)、代码分析一、二叉树的序列化与反序列化(一)、题目需求序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网原创 2020-12-15 19:27:19 · 472 阅读 · 0 评论 -
树之习题分析上——树的遍历
树之习题分析一、树的前序遍历(一)、题目需求 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例 1:输入:root = [1,null,2,3]输出:[1,2,3]```示例 2:输入:root = []输出:[]示例 3:输入:root = [1]输出:[1]示例 4:输入:root = [1,2]输出:[1,2]示例 5:输入:root = [1,null,2]输出:[1,2]提示:树中节点数目在范围 [0, 100] 内原创 2020-11-04 20:11:33 · 501 阅读 · 0 评论 -
双指针之习题分析
双指针之习题分析一、两数之和——有序数组(一)、题目需求(二)、解法(三)、代码分析(四)、流程图二、三数之和(一)、题目需求(二)、解法(三)、代码分析(四)、流程图三、验证三角形(一)、题目需求(二)、解法(三)、代码分析(四)、流程图四、存水问题(一)、题目需求(二)、解法(三)、代码分析(四)、流程图分析一、两数之和——有序数组(一)、题目需求 给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值 index1 和 index2,其中原创 2020-11-01 14:16:55 · 228 阅读 · 4 评论 -
二分查找之习题分析
二分查找之习题分析一、在旋转有序的数组中搜索(一)、题目需求(二)、解法(三)、代码解析二、在旋转有序的数组中寻找最小数值(一)、题目需求(二)、解法(三)、代码解析三、寻找峰值(一)、题目需求(二)、解法(三)、代码解析四、切木头(一)、题目需求(二)、解法(三)、代码解析一、在旋转有序的数组中搜索(一)、题目需求 给你一个升序排列的整数数组 nums ,和一个整数 target 。 假设按照升序排序的数组在预先未知的某个点上进行了旋转。(例如,数组 [0,1,2,4,5,6,7] 可能变原创 2020-11-01 10:09:35 · 1123 阅读 · 0 评论 -
优先队列的详解(包含优先队列的初级实现以及堆的实现方式)
优先队列一、优先队列的概念二、优先队列的API三、优先队列的初级实现(一)、数组实现(无序)(二)、数组实现(有序)(三)、链表表示法(四)、图表分析四、堆的定义(一)、堆的概念(二)、二叉堆表示法五、堆的算法(一)、堆实现的比较和交换方法(二)、由下至上的堆有序化(上浮)(三)、由上至下的堆有序化(下沉)(四)、堆的类定义以及相关方法一、优先队列的概念 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。原创 2020-10-27 22:38:25 · 1621 阅读 · 0 评论 -
快速排序详解(Java实现,包含代码实现以及算法解析)
快速排序一、快速排序的概念二、基本算法三、代码实现四、快速排序算法解析五、快速排序算法的基本性质一、快速排序的概念 快速排序实现简单适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。快速排序引人注目得特点包括它是原地排序(只需要一个很小得辅助栈),且将长度为N的数组排序所需的时间和NlgN成正比。 另外快速排序的内循环比大多数排序算法都要短小,这意味着它无论是在理论上还是在实际中都要更快。 它的主要缺点是非常脆弱,在实现时要非常小心才能避免低劣的性能。二、基本算法原创 2020-10-27 09:44:09 · 334 阅读 · 0 评论 -
LRU缓存机制(包含流程图分析以及各操作的解析详解)
LRU缓存机制一、题目需求二、LRU缓存机制的概念三、LRU缓存机制的代码示例四、LRU缓存机制的分析(一)、内部类CacheNode(二)、内部变量(三)、get()操作(四)、put()操作(五)、移动操作五、流程图一、题目需求运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果关键字 (key) 存在于缓存中,则获取关键字的值(总是正数),否则返回 -1。写入数据 pu原创 2020-10-26 22:30:40 · 4054 阅读 · 0 评论 -
两数相加的题型解法(包含流程图分析以及测试用例)
两数相加一、题目需求二、解法三、测试用例四、流程图一、题目需求给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807二原创 2020-10-26 20:03:22 · 3032 阅读 · 0 评论 -
归并排序算法(Java实现包含自顶向下的归并排序算法以及自底向上的归并排序算法)
归并排序算法一、归并排序的概念二、原地归并的抽象方法(一)、原地归并的抽象方法的概念(二)、原地归并的抽象方法的代码示例三、自顶向下的归并排序(一)、自顶向下的归并排序的概念(二)、自顶向下的归并排序的代码示例(三)、自顶向下的归并排序的基本性质四、自底向上的归并排序(一)、自底向上的归并排序的概念(二)、自底向上的归并排序的代码示例(三)、自底向上的归并排序的基本性质一、归并排序的概念 归并:即将两个有序的数组归并成一个更大的有序数组。根据归并这一操作,得出一种简单的递归排序算法:归并排序。要将一原创 2020-10-26 16:06:16 · 523 阅读 · 0 评论 -
复制带随机指针的链表的题型分析(包含流程图分析)
复制带随机指针的链表一、题目要求二、使用HashMap的解法三、使用添加节点的解法四、测试用例五、流程图(一)、使用HashMap的流程图(二)、添加节点的流程图一、题目要求给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的 深拷贝。我们用一个由 n 个节点组成的链表来表示输入/输出中的链表。每个节点用一个 [val, random_index] 表示:val:一个表示 Node.val 的整数。random_index:随机指针指向的原创 2020-10-26 00:20:36 · 105 阅读 · 0 评论 -
反转链表题型分析(包含简单与中等难度两种,附带流程图分析)
反转链表题型分析一、反转链表一(简单)(一)、题目要求(二)、解法(三)、测试用例(四)、流程图分析二、反转链表二(中等)(一)、题目要求(二)、解法(三)、测试用例(四)、流程图分析一、反转链表一(简单)(一)、题目要求反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL(二)、解法public class Solution { public sta原创 2020-10-25 19:36:06 · 265 阅读 · 0 评论 -
初级排序算法之选择排序、插入排序、希尔排序
初级排序算法一、排序算法的辅助方法代码示例二、选择排序算法(一)、选择排序算法的概念(二)、选择排序算法的流程图(三)、选择排序算法的代码示例(四)、选择排序算法的测试用例三、插入排序算法(一)、插入排序算法的概念(二)、插入排序算法的流程图(三)、插入排序算法的代码示例(四)、插入排序算法的测试用例一、排序算法的辅助方法代码示例public class SortUtil { // 对元素进行比较 public static boolean less(Comparable v, Com原创 2020-10-23 21:42:08 · 380 阅读 · 0 评论 -
算法基础之基础编程模型
算法基础之基础编程模型一、Java程序的基本结构二、原始数据类型与表达式(一)、Java的原始数据类型(二)、表达式(三)、类型转换三、语句四、数组(一)、数组的概念(二)、数组的典型代码示例五、静态方法六、字符串(一)、字符串的概念(二)、字符串的类型转换一、Java程序的基本结构 1、原始数据类型:它们在计算机程序中精确地定义整数、浮点数和布尔值等。它们的定义包括取值范围和能够对相应的值进行的操作,它们能够被组合为类似于数学公式定义的表达式。 2、语句:语句通过创建变量并为其赋值、控制运行原创 2020-10-23 16:52:39 · 332 阅读 · 0 评论 -
初识算法之算法概述及时间复杂度与空间复杂详解
初识算法之算法概述及时间复杂度与空间复杂详解初识算法之算法概述及时间复杂度与空间复杂详解初识算法之算法概述及时间复杂度与空间复杂详解一、算法的概念二、时间复杂度详解(1)、时间复杂度的概念(2)、时间复杂度的分析方法(3)、部分时间复杂度类型的代码实现三、空间复杂度的详解(1)、空间复杂度的概念(2)、部分空间复杂度类型的代码实现一、算法的概念 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 算法最先来自数学领域,在数学领域中,算法是用于解原创 2020-09-04 11:59:53 · 297 阅读 · 0 评论