数据结构与算法
我会jvav啊
此人很懒,已经转行摸鱼了
展开
-
为什么快速排序是不稳定的?举例说说(面试题)
如果不了解快排的朋友请移步我的这篇博客快速排序讲解和代码实现那么为什么说快排是不稳定的呢通俗的说就是一堆数里面排序,有两个相同的数A和B,排序之前A在B前面,排序之后B在A前面,这就是快排的不稳定性。再看一个比较极端的例子数组中全是相同的数 全是 1 1 1 1 1 1 1 1 1 1 1 1 1 1那么i,j从两次扫一次时间复杂度就是O(n2)关于快排的时间复杂度最优情况:每次准基都恰好能平分数组 时间复杂度O(nlogn)最坏情况:每次准基都是最小数或者最大数 时间复杂度O(n²)平原创 2021-04-16 20:56:37 · 6357 阅读 · 0 评论 -
java数据结构之图(邻接矩阵和邻接表)
JAVA数据结构之图 1、图的介绍和原理 1.1、图的基本概念 图是由顶点集(VertexSet)和边集(EdgeSet)组成,针对图G,顶点集和边集分别记为V(G)和E(G)。依据图的边集是否为有向,可把图分为有向图和无向图,根据图是否有权重,可以分为有权图和无权图。 图的基本术语: 1:邻接点----在一个无向图中,若存在一条边(Vi,Vj),则称Vi,Vj为此边的两个端点,并称它们互...转载 2021-02-03 18:11:21 · 332 阅读 · 0 评论 -
归并排序-java
归并排序归并排序是一种概念上最简单的排序算法,与快速排序一样,归并排序也是基于分治法的。归并排序将待排序的元素序列分成两个长度相等的子序列,为每一个子序列排序,然后再将他们合并成一个子序列。合并两个子序列的过程也就是两路归并。public class MergeSort { public void merge(int a[],int l,int mid,int r){ int tmp[] = new int[r-l+1]; int p1 = l , p2 = m原创 2021-02-01 14:37:25 · 45 阅读 · 0 评论 -
二叉树的层序遍历(java)
层序遍历需要借助队列的先进先出特性来实现 public List<Integer> levelOrder(TreeNode root){//层序遍历 List<Integer> list = new ArrayList<>(); Queue<TreeNode> queue = new LinkedList<>(); queue.add(root); while (!queue.原创 2021-01-29 17:53:09 · 242 阅读 · 0 评论 -
二叉搜索树基本性质
二叉搜素树满足三个性质1.任意节点的左子树若不为空,那么左子树上的所有节点均小于等于该节点的值2.任意节点的右子树若不为空,那么右子树上的所有节点均大于等于该节点的值3.任意节点的左右子树也均为二叉搜素树...原创 2021-01-28 20:59:58 · 637 阅读 · 0 评论 -
二叉树的先序,中序,后序遍历序列(java实现非递归与递归)
先序遍历:根左右中序遍历:左根右后序遍历:左右根建树public class BinaryTree { TreeNode root; public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() { } TreeNode(int val) { this.val = val;原创 2021-01-28 19:50:22 · 820 阅读 · 0 评论 -
二叉树的先序,中序,后序遍历序列(初级思路,不含代码)
今天做题看见二叉树的遍历题,有点忘了,百度了一下。发现没有很详细的说明,幸好之前已经会了,看两个例子就会了。所以打算自己写个说明,给那些刚学习二叉树遍历和刚开始笔试忘记了的兄弟们。(这里的例子均为网上找到的例子,虽然自己写例子也可以,但怕因为打错字或者各种问题,答案不对的话会造成不必要的麻烦<嘻嘻>) 先看一下定义:(估计想学的同学已经看过无数遍了) (1)先序遍历:(根左右) (2)中序遍历:...转载 2021-01-28 19:38:47 · 17640 阅读 · 0 评论 -
快速排序-java实现
快速排序的基本思想是:每次排序的时候从数列里去出一个数设为基准数将小于等于基准点的数全部放到基准点的左边将大于等于基准点的数全部放到基准点的右边再对左右区间重复第二步和第三步,直到各区间只有一个数。 public void quickSort(int[] nums,int l,int r) { if (l >= r) return; int i = l,j = r; int base = nums[l];//基准数 int原创 2021-01-21 19:26:37 · 365 阅读 · 0 评论 -
动态规划详解-背包问题(超简单理解加区分01背包和完全背包)
01背包对于01背包我们面对一件物品时只有两种选择 拿或者不拿 看哪种价值最大动态转移方程为 f[i][j]=max(f[i-1][j],f[i-1][j-v]+w);让我们先来看看朴素算法我们接下来对朴素算法进行优化对于朴素算法我们进行优化 可以对空间优化 将二维动态压缩成一维而优化时我们需要去点f[i]这一维 去掉后我们判断和之前的式子是否相等我们可以在图中看出我们原来需要的是f[i-1][j-v]+w的值而现在由于j>v我们的式子等价于f[i][j-v]+w,我们需要的是第i原创 2021-01-16 23:29:54 · 825 阅读 · 2 评论 -
动态规划详解-入门
什么是动态规划上图中题目A是用动态规划做 而题目B是用dfs动态规划的三种类型题现在让我们先看一道例题通过题目我们发现这是一道求最值问题,如果暴力时间复杂度会非常大,这时候就需要用上动态规划了而我们求解一道动态规划的题目需要进行四步动态规划组成部分一:确定状态确定状态的关键点就在于最后一步操作和划分成子问题现在我们的问题就变成了找27-ak时最少的硬币数+1这就是划分子问题此时我们的f(x)的含义就是最少用多少枚硬币拼出的都X当状态分析完后 我们需要写出状态转移方程动态原创 2021-01-15 23:00:15 · 164 阅读 · 0 评论