![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 87
算法稳打稳打 扎实训练
Yungang_Young
这个作者很懒,什么都没留下…
展开
-
08_排序之归并、快速
文章目录1.归并排序2.快速排序3.归并与快排的区别4.快排的时间复杂度分析5.如何在O(n)时间复杂度内求无序数组的第K大元素1.归并排序使用分治思想public static void mergeSort(int[] A, int n){ int[] B = new int[A.length]; mergeSort_c(A, 0, n - 1, B);}public static void mergeSort_c(int[] A, int left, int right, i原创 2021-01-25 13:49:04 · 265 阅读 · 0 评论 -
07_排序之冒泡、插入、选择
文章目录1.如何分析一个排序算法?2.冒泡排序3.插入排序4.选择排序5.为什么插入比冒泡更受欢迎?1.如何分析一个排序算法?排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数 、低阶比较次数和交换(或移动)次数排序算法的内存消耗也就是空间复杂度,特别的,空间复杂度为O(1)的排序算法也叫原地排序算法排序算法的稳定性如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。2.冒泡排序算法代码public static void原创 2021-01-25 12:32:58 · 121 阅读 · 0 评论 -
02_深入理解数组
文章目录1.数组是如何实现随机访问的?2.低效的插入和删除3.容器与数组4.为什么数组要从0开始?4.思考题1.数组是如何实现随机访问的?数组的概念: 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。那么什么是线性表呢?顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并原创 2021-01-25 12:23:07 · 122 阅读 · 0 评论 -
06_递归小tips
文章目录1.如何写一个递归算法2.递归代码要警惕堆栈溢出3.递归代码要警惕重复计算4.怎么将递归代码改写为非递归代码1.如何写一个递归算法首先,要判断是否满足以下三个条件一个问题的解可以分解为几个子问题的解这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样存在递归终止条件写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。注意: 只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系原创 2021-01-25 12:13:36 · 276 阅读 · 0 评论 -
05_深入理解队列
1.队列的实现顺序队列实现// 用数组实现的队列public class ArrayQueue { // 数组:items,数组大小:n private String[] items; private int n = 0; // head表示队头下标,tail表示队尾下标 private int head = 0; private int tail = 0; // 申请一个大小为capacity的数组 public ArrayQueue(int capacity) {原创 2021-01-25 12:04:11 · 125 阅读 · 0 评论 -
04_深入理解栈
1.如何实现一个“栈”栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。基于数组的顺序栈代码// 基于数组实现的顺序栈public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; //栈的大小 // 初始化数组,申请一个大小为n的数组空间 public原创 2021-01-18 23:14:25 · 101 阅读 · 0 评论 -
01_算法的复杂度分析
复杂度分析大O时间复杂度表示法: 公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。我们只需要记录一个最大量级就可以了时间复杂度分析:1.只关注循环执行次数最多的一段代码2.加法法则。总复杂度等于量级最大的那段代码的复杂度3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积几种常见时间复杂度实例分析多项式量级非多项式量级,NP问题 O(2n)和O(n!) 非常低效几种常见的多项式时间复杂度O(1): 不存在循环、递归O(logn)、O(nlogn):如下代码i=原创 2021-01-13 22:11:44 · 159 阅读 · 0 评论 -
03_深入理解链表
1.单向链表与双向链表从结构上来看,双向链表可以支持 O(1) 时间复杂度的情况下找到前驱结点,正是这样的特点,也使双向链表在某些情况下的插入、删除等操作都要比单链表简单、高效先来看删除操作、分为两种情况第一种:删除节点中“值等于某个给定值”的结点第二种:删除给定指针指向的结点先来看第一种,对于二者,时间复杂度都为O(n)第二种,对于单链表来说,删除某个结点 q 需要知道其前驱结点,而单链表并不支持直接获取前驱结点,所以,为了找到前驱结点,我们还是要从头结点开始遍历链表,直到 p->n原创 2021-01-14 13:40:10 · 159 阅读 · 0 评论