
数据结构与算法
文章平均质量分 70
数据结构与算法笔记
WSKH0929
2022年博客之星综合评分人工智能领域Top4、总榜Top24;阿里云专家博主;优快云博客专家、人工智能领域优质创作者;已授权美国专利1件、发明专利10件和软著2件、受理发明专利2件;获得17个算法/系统开发类竞赛奖项,在第四届集成电路EDA设计精英挑战赛(国内EDA算法领域最高水平竞赛)中获得一等奖和华大九天企业特别奖;负责过5个企业项目的算法及系统开发,其中3个合作企业为世界五百强,拥有较丰富的算法设计与开发经验
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
【蓝桥杯】第十五届蓝桥杯大赛软件赛省赛(Java研究生组)个人解题思路及代码分享
现在给出一局小蓝的游戏记录文件,log.txt 中记录了N 条记录,每条记录有三个字段,依次为正确的敲击字符、小蓝打出的字符、打出字符的时间对应的毫秒时间戳。例如,数字14 和数字41,它们的封闭图形的个数都是1,但14 < 41,所以数字14 小于数字41。对此,请你为管理团队计算出,对于每个操作,如果不执行该操作而执行其它操作,库存量为0 的商品的种类数。具体地,如果下级品种的生命力数值无法被上级品种的生命力数值整除,或者下级品种的生命力数值大于上级品种的生命力数值时,它们便会受到压制,无法茁壮成长。原创 2024-04-13 16:02:23 · 7562 阅读 · 22 评论 -
【图解算法数据结构】分治算法篇 + Java代码实现
【代码】【图解算法数据结构】分治算法篇 + Java代码实现。原创 2023-09-02 22:25:02 · 448 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记13 - 图
前面我们学了线性表和树线性表局限于一个直接前驱和一个直接后继的关系树也只能有一个直接前驱也就是父节点当我们需要表示多对多的关系时,这里我们就用到了图。原创 2023-03-29 13:26:36 · 4677 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记12 - 多路查找树
B树通过重新组织节点,降低树的高度,并且减少IO读写次数来提升效率(如下图所示,就是一个B树)如上图所示,B树通过重新组织节点,降低了树的高度文件系统及数据库的设计者利用了磁盘预读原理,将一个节点的大小设为等于一个页的大小(页的大小通常为4k),这样每个节点只需要一次IO就可以完全载入将树的度M设置为1024,在600亿个元素中,最多只需要4次IO操作就可以读取到想要的元素,B树(B+树)广泛应用于文件存储系统以及数据库系统中2-3树的所有叶子节点都在同一层(只要是B树都满足这个条件)原创 2023-02-15 12:27:07 · 3923 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记11 - 树结构的实际应用
堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最好最坏平均时间复杂度均为OnlognO(n\log n)Onlogn。他也不是稳定排序。堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆,注意:没有要求节点的左孩子的值和右孩子的值的大小关系。每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆下面是大顶堆举例说明:下面是小顶堆距离说明:一般升序排序采用大顶堆,降序排序采用小顶堆。原创 2023-01-17 14:41:40 · 17399 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记10 - 树结构的基础部分
说明:对前面的中序线索化二叉树,进行遍历分析:因为线索化后,各个节点指向有变化,因此原来的遍历方式不能使用,这是需要使用新的方式遍历线索化二叉树,各个节点可以通过线型方式遍历,因此无需使用递归方式,这样也提高了遍历的效率。遍历的次序应当和中序遍历保持一致。// 测试一把中序线索二叉树的功能 HeroNode root = new HeroNode(1 , "tom");// 二叉树,后面我们要递归创建, 现在简单处理使用手动创建 root . setLeft(node2);原创 2023-01-15 09:19:28 · 17988 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记09 - 哈希表
散列表 (Hash table, 也叫哈希表), 是根据关键码值(Key value)而直接进行访问的数据结构。也就是说, 它通 过把关键码值映射到表中一个位置来访问记录, 以加快查找的速度。这个映射函数叫做散列函数, 存放记录的数组 叫做散列表。原创 2023-01-14 23:20:05 · 18389 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记08 - 查找算法
在 java 中, 我们常用的查找有四种:1)顺序(线性)查找2)二分查找/折半查找3)插值查找4)斐波那契查找。原创 2023-01-14 08:46:48 · 19125 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记07 - 排序算法
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较 相邻元素的值, 若发现逆序则交换, 使值较大的元素逐渐从前移向后部, 就象水底下的气泡一样逐渐向上冒。优化。原创 2023-01-13 09:14:14 · 19837 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记06 - 算法复杂度详解
时间频度: 一个算法花费的时间与算法中语句的执行次数成正比例, 哪个算法中语句执行次数多, 它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为TnTn。类似于时间复杂度的讨论, 一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间, 它也是 问题规模n\mathrm{n}n的函数。空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。有的算法需要占用的 临时工作单元数与解决问题的规模n。原创 2023-01-13 09:12:06 · 19263 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记05 -递归
八皇后问题, 是一个古老而著名的问题, 是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯 1848 年提出: 在8×88 \times 88×8格的国际象棋上摆放八个皇后, 使其不能互相攻击, 即: 任意两个皇后都不能处于同一行、 同一列或同一斜线上, 问有多少种摆法(92)。原创 2023-01-12 22:30:35 · 19139 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记04 - 栈
栈的英文为(stack)栈是一个先入后出(FILO-First In Last Out)的有序列表。栈(stack)是限制线性表中元素的揷入和删除只能在线性表的同一端进行的一种特殊线性表。允许揷入和删除的 一端, 为变化的一端, 称为栈顶(Top), 另一端为固定的一端, 称为栈底(Bottom)。根据栈的定义可知, 最先放入栈中元素在栈底, 最后放入的元素在栈顶, 而删除元素刚好相反, 最后放入的元 素最先删除, 最先放入的元素最后删除图解方式说明出栈(pop)和入栈(push)的概念。原创 2023-01-11 23:38:22 · 19785 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记03 - 链表
链表是有序的列表,它在内存中的存储如下:单链表(带头结点) 逻辑结构示意图如下:使用带 head 头的单向链表实现 - 水浒英雄排行榜管理完成对英雄人物的增删改查操作输出:2.3 面试题(新浪、百度、腾讯)求单链表中有效节点的个数查找单链表中的倒数第k个结点单链表的反转从尾到头打印单链表合并两个有序链表三、双向链表3.1 思路分析使用带 head 头的双向链表实现 - 水汻英雄排行榜管理单向链表的缺点分析:分析 双向链表的遍历, 添加, 修改, 删除的操作思路 ===>===>===原创 2022-12-07 18:33:23 · 20235 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记02 - 队列
当我们将数据存入队列时称为” addQueue”, addQueue 的处理需要有两个步骤: 思路分析1)将尾指针往后移: rear +1+1+1, 当 front ====== rear 【空】2)若尾指针 rear 小于队列的最大下标 maxSize-1, 则将数据存入 rear 所指的数组元素中, 否则无法存入数据。 rear ==max==\max==max Size −1-1−1 [队列满]输出:3.3 问题分析与优化目前数组使用一次就不能用, 没有达到复用的效果将这个数组使用算法原创 2022-12-03 20:06:26 · 20720 阅读 · 0 评论 -
【尚硅谷】Java数据结构与算法笔记01 - 稀疏数组
【尚硅谷】Java数据结构与算法笔记01-稀疏数组当一个数组中大部分元素为 0 , 或者为同一个值的数组时, 可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:输出:原创 2022-12-03 19:10:46 · 20687 阅读 · 0 评论 -
【图解算法数据结构】搜索与回溯算法篇 + Java代码实现
【代码】【图解算法数据结构】搜索与回溯算法篇 + Java代码实现。原创 2022-11-29 16:53:26 · 20937 阅读 · 0 评论 -
【图解算法数据结构】动态规划篇 + Java代码实现
【代码】【图解算法数据结构】动态规划篇 + Java代码实现。原创 2022-09-22 20:22:16 · 21393 阅读 · 0 评论 -
【图解算法数据结构】数据结构篇 + Java代码实现
本题使用有限状态自动机。根据字符类型和合法数值的特点,先定义状态,再画出状态转移图,最后编写代码即可。原创 2022-09-15 16:00:24 · 22013 阅读 · 0 评论 -
【LeetCode】初级算法案例+java代码实现(数学篇)
文章目录一、Fizz Buzz二、计数质数三、3的幂四、罗马数字转整数一、Fizz Buzzpublic List<String> fizzBuzz(int n) { List<String> list = new ArrayList<>(n); for (int i = 1; i <= n ; i++) { boolean b1 = i%3==0; boolean b2 = i%5==0; .原创 2021-12-06 18:58:30 · 21581 阅读 · 0 评论 -
【LeetCode】初级算法案例+java代码实现(排序和搜索篇)
文章目录一、合并两个有序的数组二、第一个错误版本一、合并两个有序的数组public void merge(int[] nums1, int m, int[] nums2, int n) { int temp[] = new int[m + n]; int index = 0; int i = 0; int j = 0; while (i < m && j < n) { if (nums1[i] <= nums.原创 2021-11-29 19:39:17 · 21186 阅读 · 0 评论 -
【LeetCode】初级算法案例+java代码(设计问题篇)
文章目录一、打乱数组二、最小栈一、打乱数组class Solution { int[] nums; // 用以打乱的数组 int[] tempArr; public Solution(int[] nums) { this.nums = nums.clone(); tempArr = nums.clone(); } public int[] reset() { return nums; }.原创 2021-11-28 17:27:50 · 21224 阅读 · 0 评论 -
【LeetCode】初级算法案例+java代码(树篇)
文章目录前言一、二叉树的最大深度二、验证二叉搜索树三、对称二叉树四、二叉树的层序遍历五、将有序数组转换为二叉搜索树前言本文通篇基于TreeNode类进行解题,其代码如下,下面不再赘述:public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val; } .原创 2021-11-28 17:18:56 · 21367 阅读 · 0 评论 -
【LeetCode】初级算法案例+java代码(数组篇)
文章目录1.删除排序数组的重复项2.买卖股票的最佳时机II3.旋转数组4.存在重复元素5.只出现一次的数字6.两个数组的交集 II总结1.删除排序数组的重复项题目:解题思路:代码:在这里插入代码片2.买卖股票的最佳时机II题目:解题思路:允许多次买卖,意味着所有的差价都可以赚到,所以题目就相当于求解可以转到的最大总差价代码:public class Solution { public int maxProfit(int[] prices) { if(pr.原创 2021-11-26 21:15:46 · 21825 阅读 · 0 评论 -
【排序算法】Java实现9大排序算法及其速度对比(附详细代码)
文章目录一、各种排序算法1.java自带的排序2.冒泡排序3.堆排序4.插入排序5.归并排序6.快速排序7.选择排序8.希尔排序9.二叉排序树排序二、各种算法的速度对比:三、总结:一、各种排序算法1.java自带的排序int[] nums = new int[]{8,4,3,7,5,6};Arrays.sort(nums);2.冒泡排序public class BubbleSort { public static void main(String[] args) {原创 2021-11-25 11:17:53 · 22597 阅读 · 0 评论