
数据结构与算法
freshbin000
默默搬砖
展开
-
数据结构与算法-链表练习题
leetcode的几道链表练习题:package com.freshbin.basics.linkedlist;/** * @author freshbin * @date 2020/5/2 14:54 */public class ListNode { int val; ListNode next; ListNode(int x) { ...原创 2020-05-04 23:29:24 · 644 阅读 · 0 评论 -
数据结构与算法-数组练习题
工作的时候,一个bug改一天,一个需求看一周。刷题的时候,三个问题解一天,还是简单的那种,急躁的时候不要继续当前的事情,急躁的时候不要继续当前的事情,急躁的时候不要继续当前的事情(手动敲三遍,希望能牢记)。下面是解了一天的三个leetcode简单小问题:package com.freshbin.basics.array;import java.util.HashMap;/** * ...原创 2020-05-01 22:54:39 · 1024 阅读 · 0 评论 -
数据结构与算法-拓扑排序
拓扑排序,感觉就是图的广度优先搜索和深度优先搜索。拓扑排序的两种实现方法:Kahn算法与DFS深度优先搜索算法Kahn算法:使用的是贪心算法思想,借助一个队列,以及一个统计当前顶点入度数的数组。当顶点的入度为0,那么就把顶点入队列。当队列不为空,那么就取出队列的顶点,同时把该顶点所有指向的顶点取出来,同时把这些顶点的入度都减一,然后判断这些顶点的入度是否为0,如果为0,就将该顶点入队列,不...原创 2020-04-29 16:44:40 · 458 阅读 · 0 评论 -
数据结构与算法-动态规划
动态规划问题一般遵循一个模型三个特征。一个模型表示在解决问题时,可以把该问题分解成多个阶段求解,每个阶段称为决策阶段,我们需要找到一组决策阶段,这组决策阶段能够产生我们期望的最优解。三个特征是指最优子结构,无后效性和重复子问题。最优子结构:子问题的最优解可以推出问题的最优解,而父问题的最优解可以推出子问题的最优解,也就是说后面阶段的最优状态可以由前面的最优状态推导出来。(感觉有点像是贪心算法每...原创 2020-04-28 11:21:54 · 473 阅读 · 0 评论 -
数据结构与算法-分治算法
分治算法一般用递归来实现,分治算法是一种处理问题的思想,递归是一种编程技巧,在分治算法的递归实现中,每一层递归都会涉及这三个操作:1、分解:将原问题分解成一系列子问题;2、解决:递归求解各个子问题,若子问题足够小,则直接求解;3、合并:将子问题的结果合并成原问题。满足下面几个条件,则可以使用分治算法:1、原问题与分解成的小问题具有相同的模式;2、原问题分解成的子问题可以独立...原创 2020-04-28 10:17:51 · 348 阅读 · 0 评论 -
数据结构与算法-回溯算法
看了一天回溯算法,一路调试代码把自己都给转晕了,看着问题解出来的代码都很简短,但是总觉得不太能理解,一路调试也知道有点像是:从起始位置出发,如果前面有几条岔路,那么先选择第一条,走下去,又有几条岔路,再选择第一条走下去,走过n个岔路口,一直都是选择第一条走下去,一路到底之后;返回上一个路口,选择第二条一路走下去,又走过n个岔路口,到底之后,再返回上一个路口,选择第二条重复下去。其实就是...原创 2020-04-25 22:50:48 · 319 阅读 · 0 评论 -
数据结构与算法-贪心算法
贪心算法的典型特征:针对一个问题,有限制值和期望值。解决步骤:针对给定数据,选择数据在限定值同等贡献的情况下,对期望值贡献最大的数据。每个状态下都找到当前状态下的最优解。两个小练习代码如下:package com.freshbin.dataStructAndAlgo.chapter37.mycode;import java.util.HashMap;/** * leetco...原创 2020-04-24 22:53:21 · 365 阅读 · 0 评论 -
数据结构与算法-堆
堆有两个特征:1、是一颗完全二叉树;2、堆中的每个节点都必须大于等于或者小于等于其子树节点的值,大于等于子节点的堆称为大顶堆,小于或等于子节点的堆称为小顶堆。堆化:当堆的插入或者删除操作会破坏堆的特征,那么这时候会重新调整,让其重新满足堆的特征。堆化有从下往上和从上往下两种。堆化就是顺着节点从上往下或者从下往上进行对比,然后交换。大顶堆的插入操作(从下往上):将准备插入的值设置为数组的最后...原创 2020-04-22 10:53:38 · 432 阅读 · 0 评论 -
数据结构与算法-二叉树
二叉树的两种存储方式:链式存储法和基于数组的顺序存储法顺序存储法:位置为i的节点的左节点为2i,右节点为2i+1,根节点存在下标为1的位置上,顺序存储会存在空白空间,因此会浪费空间,如果是一颗完全二叉树,那么就可以用数组的存储方式。二叉查找树:如果遇到支持存储重复数据的二叉查找树,那么有两种方法解决:一是相同的值存储在同一个节点上,该节点通过链表或者支持动态扩容的数据解决;二是遇到相同的值...原创 2020-04-21 09:47:18 · 171 阅读 · 0 评论 -
数据结构与算法-二分查找
完成了四个简单的二分变形,以及leetcode81题解答,不过这个解答一开始想不明白,后来剽窃了大神们的答案,才恍然大悟,我真是太菜了。代码如下:package com.freshbin.dataStructAndAlgo.chapter15.mycode;import com.freshbin.dataStructAndAlgo.chapter11.mycode.MySimpleSor...原创 2020-04-18 10:27:39 · 162 阅读 · 0 评论 -
数据结构与算法-线性排序
桶排序:首先把数据分到对应的桶中,其中每个桶的容量要注意动态扩容,使用快排将每个桶的顺序排好,之后写回原数组中。如果要保证数据的稳定性,那么桶的排序就不能用快排了,估计可以用插入排序等稳定排序算法。计数排序:特殊的桶排序,把数据分入如干个桶中,每个桶里的数据是一样的,不过桶里记录的是该数据有多少个,之后将每个桶里的数据个数从前往后叠加起来,再使用一个有序数组,从后往前遍历原数组,将原数组按照在...原创 2020-04-17 16:51:30 · 234 阅读 · 0 评论 -
数据结构与算法-简单排序
实现了冒泡排序,插入排序,选择排序,归并排序,快速快速5个简单的排序算法,其中,递归排序和快速排序比较难理解一点,使用了分治思想,用递归方式实现,感觉归并排序是从子问题自下而上的解决,快排是由主问题自上而下的解决。代码如下:package com.freshbin.dataStructAndAlgo.chapter11.mycode;/** * 排序算法 * @author fres...原创 2020-04-16 16:28:58 · 158 阅读 · 0 评论 -
数据结构与算法-递归
可以用递归解决的问题,需要满足3个前提条件:1、该问题可以分解成多个子问题;2、该问题与多个子问题的解决思路是一致的;3、有终止条件,即最底层的子问题不需要再分解成子问题也可以解决。跳台阶问题,每次只能跳一个台阶或者两个台阶,跳上第n个台阶有多少种跳法,代码如下:private HashMap<Integer, BigDecimal> cacheMap = ne...原创 2020-04-15 10:42:25 · 159 阅读 · 0 评论 -
数据结构与算法-队列
使用链表实现队列,两个指针,一个尾指针负责入队,一个头指针负责出队,比较简单,代码如下:package com.freshbin.dataStructAndAlgo.chapter06.mycode.queue;/** * 链表实现队列 * @author freshbin * @date 2020/4/14 17:32 */public class QueueBasedOnL...原创 2020-04-14 20:09:19 · 174 阅读 · 0 评论 -
数据结构与算法-栈
使用数组和链表实现栈,比较简单,代码如下:package com.freshbin.dataStructAndAlgo.chapter06.mycode.stack;/** * 使用数组实现栈 * @author freshbin * @date 2020/4/14 9:45 */public class StackBasedOnArray { private Inte...原创 2020-04-14 15:27:28 · 183 阅读 · 0 评论 -
数据结构与算法-链表习题
这次做了链表五个习题:1、单链表反转2、链表中环的检测3、两个有序的链表合并4、删除链表倒数第 n 个结点5、求链表的中间结点需要用到下列两个链表类:package com.freshbin.dataStructAndAlgo.chapter06.mycode.Link.LRU;/** * @author freshbin * @date 2020/4/11 ...原创 2020-04-13 22:21:44 · 252 阅读 · 0 评论 -
数据结构与算法-链表与数组
常见的链表:单链表,双链表,循环链表。使用链表实现LRU缓存淘汰策略代码:使用数组实现LRU缓存淘汰策略代码:使用单链表判断一个字符串是否是回文字符串:...原创 2020-04-12 15:26:02 · 194 阅读 · 0 评论 -
数据结构与算法-数组
数组是一种线性表数据结构,它用一组连续的内存空间,来存储一组具有相同类型的数据。问题一:为什么数组下标索引是从0开始?解答:这个需要从数组的寻址公式说起,因为数组的寻址公式为:a[i]_address = base_address + i * data_type_size如果从1开始,那么寻址公式就会变为a[k]_address = base_address + (k-1)*...原创 2020-04-11 19:32:15 · 250 阅读 · 0 评论 -
数据结构与算法-时间复杂度与空间复杂度
今天开始学习王争老师的数据结构与算法。一、时间复杂度1、时间复杂度由来1.1、上面代码段中,第2,3行执行分别需要1个unit_time的执行时间,第4,5执行分别需要n个unit_time的执行时间,所以这段代码总的执行时间为T(n)=(2+2n)*unit_time。1.2、上面的代码中,第2,3,4分别需要1个unit_time的执行时间,第5,6行分别需要n个uni...原创 2020-04-11 16:43:47 · 410 阅读 · 0 评论