数据结构
文章平均质量分 79
Dollar2.56
这个作者很懒,什么都没留下…
展开
-
数组
数组:是一种线性表数据结构,用一组连续存储空间,存储相同类型的数据。线性表数据排成一条线一样的存储结构,在线性表中,数据之间相互关系只有前后关系,除了数组之外,还有链表、队列、栈等。与线性表对应的就是非线性表结构,数据之间不止简单的前后关系,比如:二叉树、堆、图等。连续存储空间和相同类型的数据数组不仅要在逻辑上连续,也要在物理上连续。在内存中就要求必须是连续存储,从而导致数组在新增或删除一个数据的时候,为了保证连续性,就需要做大量数据搬移操作。同时数组也具有"随机访问"特性,可以根据下标直接访问原创 2020-08-19 21:49:14 · 202 阅读 · 0 评论 -
链表Code
文章目录[剑指 Offer 22. 链表中倒数第k个节点](https://leetcode-cn.com/problems/lian-biao-zhong-dao-shu-di-kge-jie-dian-lcof/)题解一、固定长度的链表二、双指针(最优)[剑指 Offer 18. 删除链表的节点](https://leetcode-cn.com/problems/shan-chu-lian-biao-de-jie-dian-lcof/)题解一、删除链表中结点[剑指 Offer 25. 合并两个排序的链表原创 2020-08-19 21:46:08 · 122 阅读 · 0 评论 -
排序(四)排序优化
几种排序算法时间复杂度是否稳定是否原地排序冒泡排序O(n²)稳定是插入排序O(n²)稳定是选择排序O(n²)不稳定是快速排序O(nlogn)不稳定是归并排序O(nlogn)稳定不是计数排序O(n+k),k是数据范围稳定不是桶排序O(n)稳定不是基数排序O(dn),d是维度稳定不是排序算法的选择虽然线性排序时间复杂度比较低,但是适用场景特殊条件苛刻,所以不能选用线性排序作为通用排序算法。原创 2020-07-22 22:30:24 · 97 阅读 · 0 评论 -
排序(一)
排序算法(一)排序算法时间复杂度是否基于比较冒泡、插入、选择O(n²)√快排、归并O(nlogn)√桶、计数、基数O(n)×如何分析一个排序算法一、执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系统,常数、低阶比较次数和交换(移动)次数二、内存消耗内存消耗可以通过空间复杂度衡量。原地排序:特指空间复杂度为O(1)的排序算法,不需要使用额外空间。三、稳定性稳定性:排序之前存在有两个值相等的元素,排序之后,相等元素之间原有的相原创 2020-07-21 20:05:46 · 92 阅读 · 0 评论 -
线性排序
三种时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序这三种排序算法都不涉及元素之间的比较操作,也叫做线性排序(Linear sort)桶排序核心思想将要排序的数据分散到有序的桶中,分别对桶中的数据进行排序。排序好了之后,按照桶的顺序依次取出,就得到排好序的数据了。时间复杂度时间复杂度为O(n)。假设要排序的数据有n个,均匀的划分到m个桶内,每个桶里就有k=n/m个元素,对每个桶使用快速排序,时间复杂度为O(k * logk),m个桶的时间复杂度为O(m * k * logk),因为k原创 2020-07-21 19:52:55 · 657 阅读 · 0 评论 -
时间复杂度为 O(nlogn) 的排序算法
时间复杂度为O(nlogn)的排序算法(归并排序、快速排序),比时间复杂度O(n²)的排序算法更适合大规模数据排序。归并排序归并排序的核心思想采用“分治思想”,将要排序的数组从中间分成前后两个部分,然后对前后两个部分分别进行排序,再将排序好的两部分合并在一起,这样数组就有序了。分治是一种解决问题的思想,递归是一种编程技巧,使用递归的技巧就是,先找到递归公式和终止条件,然后将递归公式翻译成递归代码。归并排序的递推公式和终止条件://递归公式merge_sort(p...r) = mege(mer原创 2020-07-21 19:51:43 · 8087 阅读 · 0 评论 -
递归
递归递归是一种常用的算法(或者是编程技巧),利用递归求解问题的时候,去的过程(一直向下向深处)叫做“递”,回来的过程(由下级深处运算携带结果返回过程)叫“归”。时间复杂度:递归代码中多了很多函数调用,当函数调用数量较大时,时间成本还是挺高的空间复杂度:每次递归调用都会在栈中保留一次临时变量,所以空间复杂度通常并不是O(1),可能是O(n)递归需要满足的三个条件一个问题的解可以分解成几个子问题的解这个问题和分解之后的子问题,除了数据规模不同外,求解思路完全一样有递归终止条件编写递归代码关原创 2020-07-15 20:46:52 · 94 阅读 · 0 评论 -
LeetCode-链表
LeetCode-链表日积月累文章目录LeetCode-链表一、数组-K个一组反转链表[25. K 个一组翻转链表](https://leetcode-cn.com/problems/reverse-nodes-in-k-group/)一、数组-K个一组反转链表25. K 个一组翻转链表25.1 题目给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。示例:给你这原创 2020-07-06 21:14:41 · 80 阅读 · 0 评论 -
数据结构与算法3-栈
数据结构与算法3-栈什么是栈操作栈这种数据结构可以看作是往只有向上开口的瓶子中放入大小合适的乒乓球,先放入的会被放在底部(压入栈顶),取的时候先取最上面的(弹出栈顶)。所以主要结构特性:先进后出,后进先出栈是一种操作受限的线性表,只能在一端新增、删除。当在需要某个数据结构只能在一端操作,并且满足先进后出,后进先出特性,就优先使用栈这种数据结构如何实现一个栈用数组实现栈叫做顺序栈,用链表实现栈叫做链式栈。主要操作就是入栈:在栈顶插入一个元素;出栈:在栈顶删除一个元素因为不需要额外存储空间,所以空间原创 2020-06-23 21:35:21 · 118 阅读 · 0 评论 -
链表(一)
链表(一)链表与数组区别数组:在逻辑上连续,在物理上也是连续的,所以如果我们申请一个100MB大小数组,内存空间中没有足够连续空间,即使可用空间大于100MB也会申请失败具有随机访问特性,可以根据首地址和下标通过寻址公式,就可以直接计算出对应的内存地址,所以查询比较快因为在物理上需要保持连续,插入或删除的时候需要整体移动操作位置之后的数据,所以增删比较慢数组大小固定,申请之后大小就固定了。申请过大过小都不太合理链表:在逻辑上连续,但是在物理上可以不用连续。在链表上存在指针域,存储着原创 2020-05-27 22:49:01 · 203 阅读 · 0 评论