随笔分类 - 数据结构与算法
摘要:####递归的三个条件 1、一个问题可以分解为多个子问题进行求解。 2、这个问题分解之后的子问题,除了数据规模不一样之外,其他解题思路完全一样。 3、存在递归终止条件 ####写递归代码的步骤 找到如何将大问题分解为小问题的规律,并基于此写出递推公式,然后再推敲终止条件,最后将递推公式和终止条件翻译
阅读全文
摘要:####队列的特点 先进先出 ####顺序队列 #####代码实现 package com.datastructure.queue; import java.util.Objects; /** * 数组实现顺序队列 * * @Auther: dlm * @Date: 2020/4/7 19:03 *
阅读全文
摘要:####栈的内存示意图 ####栈的特点 先进后出,后进先先出。 ####顺序栈代码实现 package com.datastructure.stack; /** * 基于数组实现的顺序栈 * * @Auther: dlm * @Date: 2020/4/7 12:33 * @Description
阅读全文
摘要:####实例代码 在数组array中查询元素x的下标。 // 在数组array中查询元素x的下标。n表示数组array的长度 int find(int[] array, int n, int x) { int i = 0; int pos = -1; for (; i < n; ++i) { if
阅读全文
摘要:本文使用链表实现最近最少使用缓存算法。 ####算法思想: 1、访问某元素时,先判断缓存中是否存在该元素。 2、如果存在,则删除该元素,再将该元素插入到链表首部。 3、如果不存在 1)链表已满时,删除末端元素,将该元素插入到链表首部。 2)链表未满时,将该元素插入到链表首部。 ####代码实现 pa
阅读全文
摘要:本文使用数组实现最近最少使用缓存算法。 ####算法思想: 1、访问某元素时,先判断缓存中是否存在该元素。 2、如果存在,将该元素前面的元素向右移动一位,将该元素移动到数组首位。 3、如果不存在 1)数组已满时,删除末端元素,将所有元素向右移动一位,将新元素插到首位。 2)数组未满时,将所有元素向后
阅读全文
摘要:####单链表的基本操作: 1、单链表反转 2、链表中环的检测 3、两个有序链表的合并 4、删除倒数第K个结点 5、求链表的中间结点 ####编写链表代码的注意事项: 1、如果链表为空时,代码是否能正常工作? 2、如果链表只包含一个结点时,代码是否能正常工作? 3、如果链表只包含两个结点时,代码是否
阅读全文
摘要:####链表实现回文判断 这篇文章是利用链表的反转实现回文的判断。 package com.datastructure.linkedlist; /** * 回文判断 * @Auther: dlm * @Date: 2020/4/6 11:39 */ public class Plalindrome
阅读全文
摘要:####数组的内存分布 ####一维数组的寻址公式 a[i]_address = base_address + i * data_type_size 其中data_type_size表示数组中每个元素的大小。比如数组中存储的是int类型数据,所以data_type_size就为4个字节。 ####二
阅读全文
摘要:####单链表 ####双向链表 ####循环链表 ####双向循环链表 ####链表与数据的内存分布 ####链表与数组的时间复杂度对比 ####单链表的基本操作 package com.datastructure.linkedlist; /** * @Auther: dlm * @Date: 2
阅读全文
摘要:其实,空间复杂度比时间复杂度相对来说容易分析得多。 下面这段代码中,只有第三行申请的空间为 n ,其他代码申请的空间都是常数阶。因此这段代码的空间复杂度为 O(n)。 其实,我们常见的空间复杂度主要有O(1)、O(n)、O(n2 )。 像O(logn)、O(nlogn)这样的对数阶复杂度平时基本遇不
阅读全文
摘要:这篇文章并不会讲时间复杂度的理论知识,而是通过讨论分析几种经典的时间复杂度,从而使我们能够求解平常开发中遇到的代码的时间复杂度。 ####时间复杂度分析方法: #####1、循环执行次数最多的代码 int cal(int n) { int sum = 0; int i = 1; for (; i <
阅读全文
摘要:#####欢迎关注个人公众号,可直接扫描以下二维码或微信搜索“阿毛聊技术”。
阅读全文
摘要:##一、前提 二分查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 ##二、算法步骤 置查找区间初值,left为0,right为表长-1。 当left小于等于right时,循环执行以下操作: 1)middle取值为low和high的中间值; 2)将给定值target与中间位置记录的
阅读全文

浙公网安备 33010602011771号