数据结构与算法
文章平均质量分 83
学习数据结构,为后续的算法学习做好铺垫
不断前进的皮卡丘
你有多努力的现在,就会有多无惧的未来。加油吧,少年!
展开
-
快速排序算法备考
我们知道快排在进行一次划分后,该元素的左边元素都比它小,右边都比它大。思路:想办法让右边元素大,左边元素小,而且尽量要把数组尽量平分,想到快排的划分思想,为了满足上述条件,右半部分的元素不能比左边元素个数少。主元素的元素数量超过数组长度的一半,如果数组有序,并且存在主元素,那么主元素一定在数组的中间位置。把数组A排成递增有序数列,排序后集合A1为[0,n/2-1],集合A2为[n/2n-1]第k小,说明左边有k-1个元素比它小,利用快排的划分思想,只要返回下标为k即可。右边:n/2~n-1。原创 2024-05-27 11:31:10 · 313 阅读 · 0 评论 -
数据结构与算法:二叉搜索树
希望大家可以自己动手练习一下,算法光看是不行的,必须亲自动手敲代码,有时候你会发现自己有思路,但是又写不出来,这就是缺乏练习的原因。大家平时在做题的时候,可以多思考,多总结。刚开始的时候,我们可能遇到一种新的题型,完全没有思路的时候,其实可以先去看看别人的思路,还有题解,把它理解下来,然后把代码敲出来。另外,为了检测一下我们是否真正的掌握,我们可以去做几道相似的题目巩固一下,顺便检验一下自己的成果。当二叉搜索树进行中序遍历的时候,它们的节点的值是按照从小到大排序的,我们可以利用这个性质来解答。...原创 2022-08-05 09:48:06 · 1361 阅读 · 64 评论 -
数据结构:二叉树的非递归遍历
的顺序来遍历的,如果要使用迭代的方法来解决,我们可以使用栈来解决,先把根节点放入栈中,然后将右孩子加入栈,再加入左孩子。中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中)后续遍历的遍历顺序是左右根,前序遍历的遍历顺序是根左右,我们发现我们只需要调整一下左右孩子的进栈顺序,然后再反转一下,就可以得到后序遍历。那么在使用迭代法写中序遍历,就需要借用指针的遍历来帮助访问节点,栈则用来处理节点上的元素。...原创 2022-07-20 07:00:00 · 922 阅读 · 3 评论 -
二叉树的遍历方式(递归)
写完了递归算法,运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数,并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。给定一个二叉树的根节点root,返回它的中序遍历。给你二叉树的根节点root,返回它节点值的前序遍历。前序遍历,其实就是先访问根节点,然后访问左子树,再访问右子树。...原创 2022-07-17 16:04:44 · 267 阅读 · 3 评论 -
LeetCode刷题:栈和队列的相关题目
文章是跟着代码随想录的刷题路线来的,对里面的一些题目进行了总结原创 2022-07-17 07:00:00 · 497 阅读 · 3 评论 -
数据结构:双端栈
数据结构:双端栈原创 2022-07-13 17:53:32 · 1062 阅读 · 4 评论 -
数据结构:栈及其应用
因为栈可以用顺序存储实现也可以用链式存储实现,所以把共性抽取定义出Stack接口因为栈本身是一种特殊的线性表,所以我们可以用上一篇博客中完成的ArrayList来实现我们的ArrayStack20.有效的括号思路分析.........原创 2022-07-11 11:12:26 · 749 阅读 · 15 评论 -
数据结构:线性表的实现
增删元素的话,线性结构要保证元素的连续性动态数组是顺序存储结构具体实现的核心思想因为线性结构可以有顺序存储结构和链式存储结构实现,那么我i吗就可以把对线性结构的共同操作进行抽取,定义出线性结构的接口ArrayList及其方法的实现属性扩容缩容获取元素的值获取线性表元素个数获取线性表中数组容量获取元素在线性表下标判断是否包含某个元素判断线性表是否为空清空线性表返回子线性表判断两个线性表是否相等测试.........原创 2022-07-10 02:28:08 · 1174 阅读 · 22 评论 -
算法-数组:移除元素
接下来大家可以先看看本篇文章刷了哪些题给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例 2: 给定 nums = [0,原创 2022-07-07 13:40:08 · 1274 阅读 · 38 评论 -
数据结构与算法之美 复杂度分析(下)
本文将会讲解以下内容我们先来看看上面这个代码的时间复杂度要查找的变量 x 在数组中的位置,有 n+1 种情况:在数组的 0~n-1 位置中和不在数组中。我们把每种情况下,查找需要遍历的元素个数累加起来,然后再除以 n+1,就可以得到需要遍历的元素个数的平均值,即:在时间复杂度的大O表达法中,我们可以得到时间复杂度是O(n),但是这样计算的话,计算过程是有问题的,也是我们容易犯错的地方我们知道,要查找的变量 x,要么在数组里,要么就不在数组里。我们假设在数组中与不在数组中的概率都为 1/2。另外,要查找的原创 2022-06-30 13:53:04 · 286 阅读 · 2 评论 -
数据结构与算法之美 复杂度分析(上)
文章是观看王争老师的数据结构与算法之美所写数据结构和算法本身是为了解决快和省的问题,我们希望代码运行快,并且希望节省存储空间,所以执行效率是一个很重要的考量指标,接下来要讲的是时间复杂度和空间复杂度我们可以通过把代码跑一遍,然后通过统计,监控等得到算法执行事件和占用的内存空间大小,这种方法是事后统计法,有很大的局限性:所以,我们需要用一个不需要具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法,也就是时间,空间复杂度分析方法。假设每行代码执行的时间都是一样,为unit_time时间,那么总的执行原创 2022-06-30 13:51:42 · 484 阅读 · 1 评论 -
数据结构与算法 二叉树的详解
文章目录 什么是树?树形结构的概念重要概念 树的表示形式树的应用二叉树概念总结 两种特殊的二叉树二叉树性质二叉树存储模拟实现二叉树准备工作构造二叉树节点 - (孩子表示法)构建一棵这样的二叉树debug【调试效果图】 二叉树最重要的功能 - 遍历二叉树 - (一级标题 更显重要。)1. NLR:前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点--->根的左子树--->根的右子树2. LNR:中序遍历(Inorder Trav..转载 2022-05-14 10:51:32 · 633 阅读 · 20 评论 -
[排序算法] 常见的排序算法
前言1.冒泡排序2.选择排序3.插入排序4希尔排序5.归并排序6.快速排序前言在实际需求中,我们可能要对商品的物价等按照价格高低来进行排序,这个时候,我们就得需要学会几种常见的排序算法,来满足我们的开发需求推荐一个网站,可以对数据结构等进行动画演示 https://visualgo.net/zh1.冒泡排序排序原理:①比较相邻的元素,如果前一个元素比后一个元素大,就交换这个两个元素的位置②对每一对相邻的元素做同样的操作,从开始的第一对元素到结尾的最后一对元素③每一次排序过后,都会把当.原创 2022-05-13 15:57:50 · 826 阅读 · 22 评论 -
二分查找模板全面总结
二分查找二分法的引入二分查找模板11.X的平方根当遇到查找特定元素的时候,最容易想到的就是暴力解法,直接遍历,这种做法简单粗暴,可以解题,但是时间复杂度过高。所以我们可以用二分法来提高效率。二分法的引入二分查找一般用于数据是有序的,我们要找到目标元素target,可以通过循环或者递归在每一次比较以后都把查找范围缩小一半,在剩下范围接着查找。接下来,我就来介绍一下二分查找。二分查找模板1二分查找最基本的形式就是查找条件可以不需要和元素两侧进行比较来确定。初始条件:left = 0, right =原创 2022-03-22 20:14:32 · 695 阅读 · 37 评论