自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(10)
  • 收藏
  • 关注

原创 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 11

原创 07_排序之冒泡、插入、选择

文章目录1.如何分析一个排序算法?2.冒泡排序3.插入排序4.选择排序5.为什么插入比冒泡更受欢迎?1.如何分析一个排序算法?排序算法的执行效率最好情况、最坏情况、平均情况时间复杂度时间复杂度的系数、常数 、低阶比较次数和交换(或移动)次数排序算法的内存消耗也就是空间复杂度,特别的,空间复杂度为O(1)的排序算法也叫原地排序算法排序算法的稳定性如果待排序的序列中存在值相等的元素,经过排序之后,相等元素之间原有的先后顺序不变。2.冒泡排序算法代码public static void

2021-01-25 12:32:58 17

原创 02_深入理解数组

文章目录1.数组是如何实现随机访问的?2.低效的插入和删除3.容器与数组4.为什么数组要从0开始?4.思考题1.数组是如何实现随机访问的?数组的概念: 数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。那么什么是线性表呢?顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。而与它相对立的概念是非线性表,比如二叉树、堆、图等。之所以叫非线性,是因为,在非线性表中,数据之间并

2021-01-25 12:23:07 24

原创 06_递归小tips

文章目录1.如何写一个递归算法2.递归代码要警惕堆栈溢出3.递归代码要警惕重复计算4.怎么将递归代码改写为非递归代码1.如何写一个递归算法首先,要判断是否满足以下三个条件一个问题的解可以分解为几个子问题的解这个问题与分解之后的子问题,除了数据规模不同,求解思路完全一样存在递归终止条件写递归代码的关键就是找到如何将大问题分解为小问题的规律,并且基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译成代码。注意: 只要遇到递归,我们就把它抽象成一个递推公式,不用想一层层的调用关系

2021-01-25 12:13:36 16

原创 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 21

原创 04_深入理解栈

1.如何实现一个“栈”栈既可以用数组来实现,也可以用链表来实现。用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。基于数组的顺序栈代码// 基于数组实现的顺序栈public class ArrayStack { private String[] items; // 数组 private int count; // 栈中元素个数 private int n; //栈的大小 // 初始化数组,申请一个大小为n的数组空间 public

2021-01-18 23:14:25 9

原创 力扣141_环形链表

判断链表是否有环运用快慢指针,类似于“龟兔”,假设表中有环,那么速度快的“兔子”则首先进入环,然后在里面绕圈,“乌龟”后入环,它们都在一个环内绕圈,由于速度不等,则一定会相遇。public boolean hasCycle(ListNode head) { if (head == null || head.next == null) return false; ListNode slow = head; ListNode fast = head.next;

2021-01-18 23:04:34 35

原创 力扣206_反转链表

反转链表描述:反转一个单链表。输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL本文采用迭代的方法反转链表基本思想:在遍历时,将当前结点的next指向前一个结点出现的问题:由于链表的单向,不知道前一个结点的地址若改变当前结点的next值,后续结点的地址丢失解决办法:用prev、cur指针分别指向前驱和当前结点将后继结点的地址存储在nextTemp当中流程如下图所示(仅列出三

2021-01-14 13:53:44 18

原创 03_深入理解链表

1.单向链表与双向链表从结构上来看,双向链表可以支持 O(1) 时间复杂度的情况下找到前驱结点,正是这样的特点,也使双向链表在某些情况下的插入、删除等操作都要比单链表简单、高效先来看删除操作、分为两种情况第一种:删除节点中“值等于某个给定值”的结点第二种:删除给定指针指向的结点先来看第一种,对于二者,时间复杂度都为O(n)第二种,对于单链表来说,删除某个结点 q 需要知道其前驱结点,而单链表并不支持直接获取前驱结点,所以,为了找到前驱结点,我们还是要从头结点开始遍历链表,直到 p->n

2021-01-14 13:40:10 13

原创 01_算法的复杂度分析

复杂度分析大O时间复杂度表示法: 公式中的低阶、常量、系数三部分并不左右增长趋势,所以都可以忽略。我们只需要记录一个最大量级就可以了时间复杂度分析:1.只关注循环执行次数最多的一段代码2.加法法则。总复杂度等于量级最大的那段代码的复杂度3.乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积几种常见时间复杂度实例分析多项式量级非多项式量级,NP问题 O(2n)和O(n!) 非常低效几种常见的多项式时间复杂度O(1): 不存在循环、递归O(logn)、O(nlogn):如下代码i=

2021-01-13 22:11:44 14

空空如也

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除