![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
济海河神
这个作者很懒,什么都没留下…
展开
-
动态规划之凑硬币和股票买卖
动态规划解决凑硬币问题问题一有一块 两块 五块3种硬币 总共凑成100元 问最小的硬币数是多少?思路典型的最值问题,可以考虑用动态规划的思路进行求解。初始化一个dp数组,数组长度为100+1(考虑凑0元)。dp[i]表示凑i元需要的最少硬币数。有三种硬币,每一种都要去尝试,例如当i足够大(至少为三)时,dp[i]应该考虑是dp[i-1]+1、dp[i-2]+1、dp[i-5]+1三种情况中的最小那个。代码public class MinCoins{ private static in原创 2020-05-11 14:58:49 · 220 阅读 · 0 评论 -
两种特别好数组原位删除元素的方法
两种特别好的数组原位删除元素的方法问题一给定一个排序数组,你需要在** 原地** 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3原创 2020-05-11 14:34:52 · 195 阅读 · 0 评论 -
判断二叉树的对称性
判断二叉树的对称性给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3递归方法public boolean judge(TreeNode t1,TreeNode t2){ if(t1==null &&a原创 2020-05-11 11:27:47 · 454 阅读 · 0 评论 -
约瑟夫问题
约瑟夫问题约瑟夫问题介绍约瑟夫问题是典型的单向环形链表的应用下图来自尚硅谷韩顺平老师《数据结构与算法》课件:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Pl6T1oYS-1589164343318)(C:\Users\18221\AppData\Roaming\Typora\typora-user-images\image-20200511101253132.png)]代码节点类的构建class Boy{ private int no; pri原创 2020-05-11 10:32:42 · 196 阅读 · 0 评论 -
移动数组中的元素
移动数组中的元素问题描述给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数。示例 1:输入: [1,2,3,4,5,6,7] 和 k = 3输出: [5,6,7,1,2,3,4]解释:向右旋转 1 步: [7,1,2,3,4,5,6]向右旋转 2 步: [6,7,1,2,3,4,5]向右旋转 3 步: [5,6,7,1,2,3,4]示例 2:输入: [-1,-100,3,99] 和 k = 2输出: [3,99,-1,-100]解释: 向右旋转 1 步: [9原创 2020-05-11 10:08:04 · 2484 阅读 · 0 评论 -
数组中只出现一次问题
数组中只出现一次问题问题一描述:只有一个数只出现一次,其他都出现两次给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例 2:输入: [4,1,2,1,2]输出: 4解法这个还是比较简单的,利用1.数与数本身异或为0;2.0与任何数异或还是该数本身。两个性质,直接遍历这个数组,然后遍历过程中进行异或运算,最后得原创 2020-05-11 10:07:27 · 424 阅读 · 0 评论 -
数组中逆序对个数问题
数组中逆序对个数问题问题描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007解法采用分治算法,也就是借鉴归并排序的算法思路,因为在合并的过程中,如果前一部分对应的数大于后一部分对应的数,由于每一部分在合并时已经排序好了,所以逆序对肯定是mid-前一部分的index+1,可以看下面的图解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直原创 2020-05-11 10:06:55 · 621 阅读 · 0 评论 -
全排列问题
全排列问题题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。Solution:从这张图中,我们可以看出来,找全排列类似于深度优先遍历,深度优先最关键的就是要记住上一个状态,而所谓回溯就是要回到上一没有操作过的状态,再去考虑别的情况。例如上面这个图,我们的想法是每次都把一个数固定在前面原创 2020-05-10 14:39:30 · 194 阅读 · 0 评论 -
二叉树的非递归遍历方式(Java)
二叉树的非递归遍历方式(Java)前序遍历思路:就是通过一个栈来实现:从root开始,root非空先入栈;进入循环判断,若栈非空,则弹出栈顶元素,打印栈顶元素的值当弹出的栈顶元素的右子节点非空时,将右子节点压入栈;当弹出的栈顶元素的左子节点非空时,将左子节点压入栈;直到栈中无元素。代码:public static ArrayList<Integer>...原创 2020-04-24 14:24:35 · 167 阅读 · 0 评论 -
改进版笔试题迷宫问题--深度优先搜索
在迷宫上下左右移动的基础上,增加了飞行到中心对称位置处的限制package com.alibaba.test;import java.util.Scanner;public class Main { static int[][] map; static int[][] vis; static int[][] move = { { 0, 1 }, { 0, -1 }, { 1, ...原创 2020-03-23 20:08:24 · 198 阅读 · 0 评论 -
Prim算法、Kruscal算法、Dijkstra算法、Floyd算法
prim算法//创建最小生成树->村庄的图class MinTree { //创建图的邻接矩阵 /** * * @param graph 图对象 * @param verxs 图对应的顶点个数 * @param data 图的各个顶点的值 * @param weight 图的邻接矩阵 */ p...原创 2020-03-08 17:51:41 · 299 阅读 · 0 评论 -
剑指Offer编程题汇总(Java版)
将牛客网上剑指offer的编程题代码汇总一下,绝大部分是按自己思路写的代码,一部分题目还贴出了大牛们的快捷解法。祝好运!/*剑指Offer编程题汇总*///1.//在一个二维数组中(每个一维数组的长度相同),//每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。public clas...原创 2020-03-04 15:58:53 · 182 阅读 · 0 评论 -
位计算
在平时编程中,对位计算用的比较少,老是记不住,还是整理记录下来比较好。按位与运算符(&)参加运算的两个数,按二进制位进行“与”运算。运算规则:只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)即 0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1。 2. 按位或运算符(|)...原创 2020-03-02 10:42:02 · 236 阅读 · 0 评论 -
Huffman树实现解压缩文件
代码是根据尚硅谷韩顺平老师写的,发现有错误,先放着留着学习吧。package com.attongji.huffmancode;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.ObjectInputStream;impo...原创 2019-12-21 09:30:22 · 322 阅读 · 1 评论 -
栈实现多位数不含小括号的四则运算
package com.aitongji.stack;public class Calculator { public static void main(String[] args) { String expression = "7*21*2-5+1-5+3-42"; // 定义一个数栈一个符号栈 ArrayStackForCal stackfornum = new Arr...原创 2019-12-17 10:40:39 · 247 阅读 · 0 评论 -
哈希表
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。---来自wiki百科理想的HashTable的每个关键字都被映射到从0到Hashtable的size-1的这个范围内,并且保证任何两个不同的...原创 2019-09-02 13:53:44 · 156 阅读 · 0 评论 -
哈希表的消除哈希冲突——双散列
以一个例子讲解双散列的应用:如下表,采用的散列函数均是key%(talesize)。当插入49时,与已经插入的89产生哈希冲突,则采用双散列函数来处理这样的哈希冲突,这里双散列函数采用的是。这里采用的是hash2(x)=7-(x mod 7)。带入49计算得到hash2(49)=7-0=7。则从第9个位置开始数7次,到了第6个位置,所以49插入到第6个位置。当插入58时,与已经插入的1...原创 2019-09-02 15:20:20 · 6785 阅读 · 0 评论 -
数据结构与算法(java描述)二叉堆
二叉堆的定义二叉堆(英语:binary heap)是一种特殊的堆,二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆。当父节点的键值总是大于或等于任何一个子节点的键值时为“最大堆”。当父节点的键值总是小于或等于任何一个子节点的键值时为“最小堆”。---wiki百科二叉堆的结构性质与堆...原创 2019-09-03 13:35:21 · 200 阅读 · 0 评论 -
图解二叉堆、d-堆、左式堆
转载:https://blog.csdn.net/yangtrees/article/details/8252760转载 2019-09-03 14:04:12 · 221 阅读 · 0 评论 -
Java之二项队列
二项队列的介绍(摘自https://www.cnblogs.com/hapjin/p/5468817.html)1)一个二项队列是若干棵树的集合。也就是说,二项队列不仅仅是一棵树,而是多棵树,并且每一棵树都遵守堆序的性质,所谓堆序的性质,就是指每个结点都比它的左右子树中结点要小(小顶堆)。这棵树称为“二项树”二项树的介绍: ...原创 2019-09-04 15:26:31 · 251 阅读 · 0 评论 -
数据结构与算法-java实现二叉堆的基本操作
package com_DataStructureAndAlogorithm_Learning;public class BinaryHeap_2<AnyType extends Comparable<?super AnyType>>{ private static final int DEAFAULT_CAPACITY=10; private int curre...原创 2019-09-24 10:53:47 · 138 阅读 · 0 评论 -
数据结构与算法-java实现左式堆
左式堆最难理解的就是合并操作了,实际就是记住一句话:根植大的堆和根植小的堆的右子树合并。可参考下图:(以下图片来自于https://blog.csdn.net/yangtrees/article/details/8252760) (1)H1只有一个节点(2)H1无右子节点(3)H1有右子节点 ...原创 2019-09-24 12:51:27 · 127 阅读 · 0 评论 -
数据结构与算法-java实现快速排序
之前学习的几个排序又忘记了,今天回顾《数据结构与算法(java描述)》这本书的时候才又不得不花时间来搞懂,其中比较难理解和难实现的就是堆排序和快速排序了吧。快速排序的算法:实现代码: private static final int CUTOFF = 3; public static <AnyType extends Comparable<? ...原创 2019-09-24 17:23:22 · 140 阅读 · 0 评论 -
二叉树之AVL树及其Java实现
AVL树平衡的定义 下图中,之所以右图的二叉树不是AVL树,是因为在节点7处,其左子树高度为2,右子树高度却为0,所以不平衡。 AVL树不平衡场景总共不平衡由以下几种情景造成:边界情景一:研究节点的左儿子的左子树破坏了平衡——>左子树单旋转...原创 2019-08-26 16:28:22 · 309 阅读 · 0 评论