- 博客(34)
- 资源 (1)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 前后端分离的Web项目分享
简介近来楼主抽时间整理了一个基于 Spring Boot 前后端分离的 web 框架,该框架基于 RBAC 思想,即 Role-Based Access Control。在该思想中,用户直接和角色关联,一个用户至少可以有一个角色;角色与权限(菜单)关联,一个角色至少可以有一个权限。该框架同时还实现了动态路由,所有路由信息全部存储于数据库中,可灵活配置。该 web 框架的后端以 Spring-Boot 为基础,整合了 Spring Security、Spring Actuator、Spring A
2020-11-26 21:23:47
557
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 二分查找杂谈之旋转排序数组
前言笔者在之前文章中整理了二分查找的相关内容及其变式内容,这里笔者同样也整理出一些二分查找相关的习题以便自己以后能够方便的复习二分查找相关内容。这些习题全部出自LeetCode,大家按照题号自行搜索即可。0033. 搜索旋转排序数组假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定...
2020-03-15 15:53:41
174
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 LeetCode股票交易问题系列记录
在LeetCode上有六道股票交易系列的算法习题,虽然这些习题的标签基本都是动态规划,但是初学者似乎很难短时间内写出高效的解决方案。笔者之前在刷这些习题的时候碰到了一个十分不错的想法,即动态规划结合有限状态机的思想来确定状态转移方程,笔者这里简单的记录一下供大家阅读拓展思路。通用模板利用“状态”进行穷举,具体到每一天,看看总共有集中可能的“状态“,再找出每个状态对应的选择。伪代码如下:for...
2020-03-14 20:53:11
766
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之最优方案总数
此处的最优方案是指物品总价值最大的方案。这里以0-1背包问题为例。给定数据如下:c = [2,3,4,5,6,7,8];v = [3,4,5,6,7,8,9];V = 23;结合求最大总价值和方案总数两个问题的思路,最优方案的总数可采取如下方式求解:令 dp[i][j]dp[i][j]dp[i][j] 表示前 i 件物品在代价为 j 时的最大价值,key[i][j]key[i][j]ke...
2020-03-13 13:21:05
1399
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之输出最优方案
一般而言,背包问题要求一个最优解,若要求输出这个最优值的方案,可参照一般动态规划问题输出方案的方法:记录下每个状态的最优值是由状态转移方程的哪一项推出来的,也就是说,记录下它是由哪一项决策推出来的,便可以根据这个决策找到上一个状态,从上一个状态接着往前推即可,这里以0-1背包为例子,给定输入如下:c = [2,3,4,5,6,7,8];v = [3,4,5,6,7,8,9];V = 23;...
2020-03-13 13:19:53
2392
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之分组背包问题
问题描述:有N件物品和一个容量为V的背包。第 i 件物品的代价是 c[i],价值是 v[i]。这些物品被划分为若干组,每组中的物品相互冲突。最多选一件。求解将哪些物品放入背包可以在总代价不超过V的条件下(物品必须保持完整)使其其总价值最大。现有数据如下:c = [[1,2,3],[2,3,4],[5,6,7,8],[7,9]];v = [[2,3,4],[1,2,3],[4,5,6,7],[8...
2020-03-13 13:17:57
468
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之二维费用背包问题
问题描述:对于每种物品,都具有两种不同的代价 c1[i]c_1[i]c1[i] 与 c2[i]c_2[i]c2[i];选择该物品必须同时付出这两种代价;对于每种代价都有一个可付出的最大值(上限)。问在每个物品只能使用一次的条件下,怎么选择物品(物品保持完整)可得到最大的价值。现有数据如下:c1 = [2,3,4,5,6,7,8]; // 代价1cap1 = 27; // 代价1的上限c2...
2020-03-13 13:16:43
435
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之混合背包问题
即前面三种背包问题混合起来,也就是说,有些物品只能取一次,有些物品可以取无限次,而有些物品可以取的次数有一个上限。问题描述如下:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]且第 i 种物品最多有 p[i] 件(其中 p[i]=0表示完全背包,p[i]=1表示0-1背包,剩下就表示多重背包问题。注意0-1背包问题是多重背包问题的特例)。背包容量...
2020-03-13 13:14:48
448
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之多重背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]且第 i 种物品最多有 p[i] 件。背包容量为 V,试问在每个物品不超过其上限的件数(物品必须保持完整)的情况下,如何让背包装入的物品具有更大的价值总和。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];p = [1,1,1,1]; // 结果与0-1背包一样。...
2020-03-13 13:13:02
591
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之完全背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]。背包容量为 V,试问在每个物品有无限个(物品必须保持完整)的情况下,如何让背包装入的物品具有更大的价值总和。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];V = 10;解题思路:令 dp[i][j]dp[i][j]dp[i][j] 表示从编号 1~i 的...
2020-03-13 13:11:11
664
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之0-1背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]。背包容量为 V,试问在每个物品最多使用一次(物品必须保持完整)的情况下,如何让背包装入的物品具有更大的价值总和。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];V = 8;解题思路:令 dp[i][j]dp[i][j]dp[i][j] 表示容量为 j 时放...
2020-03-13 13:07:35
856
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 背包问题之分数背包问题
问题描述:有n个物品,第 i 个物品的重量与价值分别为 w[i]w[i]w[i] 与 v[i]v[i]v[i]。背包容量为 V,如何让背包装入的物品具有更大的价值总和(物品可以取一部分)。现有数据如下:w = [2,3,4,5];v = [3,4,5,6];V = 8;解题思路:该问题与0-1背包问题不同的是,该问题的求解可以使用贪心算法做出贪心策略,而0-1背包问题的求解需动态规划。本...
2020-03-13 13:05:15
2842
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 二分查找杂谈之变式
笔者今天无意间看到了之前收藏的一个公众号推文,内容是关于二分查找的。笔者在这里就和大家絮叨絮叨。说起二分查找,想必大家应该比较熟悉吧,Java中Arrays中的binarySearch()函数表示的正是二分查找算法。该算法主要用于在有序数组中查找指定元素key,若元素存在,则直接返回下标。这里笔者在LeetCode上找了一个二分查找的直接例子——传送门。二分查找代码如下 public in...
2020-03-09 21:27:00
223
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Git使用笔记(1)
文章目录前言Git安装Git简单配置Git使用创建远程仓库创建本地项目建立本地Git仓库关联远程仓库拉取远程仓库添加文件到暂存区提交代码推送代码写在后面的话前言话说GitHub在程序员这个圈子应该是无人不知的吧。今日笔者也是抽了点时间来学习下如何使用Git与GitHub。这里笔者就不兜圈子了,直接给出实践吧。Git安装Git的安装网上教程一大堆,这里笔者就找了一个供大家参考一下——传送门1...
2020-03-03 22:01:36
189
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Maven 镜像与本地仓库配置
由于笔者日常开发使用的是IDEA,其自带了Maven工具。由于之前笔者在一次导入依赖的时候,发现导入速度过慢,今天笔者就来做一些适当的配置。配置镜像由于Maven的远程仓库服务器在国外,很多时候我们的访问速度会比较慢,比如创建项目的时候,会若本地仓库没有对应的以来,则回去远程仓库下载,这个时候就变得相当慢。学过Vue的都知道,国内一般推荐使用cnpm来代替npm执行相应的操作,主要是由于cnp...
2020-03-03 18:19:25
866
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 深度学习笔记之线性回归
文章目录线性回归样例线性回归线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,其表达形式为y = w’x+e。笔者这里简单记录下学习 PaddlePaddle 的笔记。文章所用的例子 百度AI Studio。样例给定5个样例,每个样例有12个属性。根据线性回归输出指定值的预测值。"""This is a demo using Paddle...
2020-02-25 17:41:50
430
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java StringTokenizer类解读
StringTokenizer 类简介StringTokenizer 类允许应用程序将一个字符串分割为各个标记。该类的方法不区分标识符、数字和带引号的字符串,也不是识别和跳过注释。分隔字符串的分隔符可以在 StringTokenizer 类对象创建时指定,亦可以在每个标记的基础上指定。StringTokenizer 类在创建时,根据标识 returnDelims 的值的不同,该类创建的对象有两种...
2020-02-01 21:01:15
476
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java Properties类解读
Properties 类简介Properties 类可以保存持久的属性,这些属性可以保存在流(Stream)里面或者从流里面读取出来。每一个键值对的键或者值都是一个字符串。Properties 类通常可以在 Java 中用于读取配置信息,对代码相关配置进行解耦合。配置信息通常存放于扩展名为 .properties 的文件中。Properties 类常用方法:setProperty(Str...
2020-02-01 17:28:03
307
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java File类解读
文章目录***File*** 类简介***File*** 类总结字段构造器函数示例代码File 类简介类 File 是文件或者目录路径的抽象表述,并非指的是表示文件的字符串。通常情况下来说,操作系统和用户接口使用系统相关的路径表示方式去表示文件或目录,而 File 提供一种系统无关的路径表示方式。一个抽象的路径名包含两部分:可选的系统相关的前缀字符串,如磁盘驱动器说明符,“/”表示UNIX...
2020-02-01 17:18:29
178
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Markdown学习笔记
简述Markdown 是一种轻量级的标记语言,通过简单的标记,使得普通文本具有一定的格式。 Markdown 具有一系列的衍生版本,极大地扩展了 Markdown 的功能(如表格、脚注、数学公式等),详情见百度-Markdown。编辑器Markdown 编辑器有很多,笔者在撰写这篇博客使用的是 Visual Studio Code ,该文本编辑器默认支持 Markdown 基本语法,即扩展...
2020-01-27 11:08:16
241
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 排序算法总结
排序算法作为基础算法,相信大家在学校上C语言课程的时候都接触过一些。笔者这里暂时将之前写的排序算法博客简单的总结一下。冒泡排序及双向冒泡排序选择排序插入排序合并排序(或归并排序)及扩展堆排序快速排序计数排序基数排序桶排序比较排序算法以上算法中的部分算法有个特点,即在排序的最终结果中,各元素的次序依赖于它们之间的比较。这类排序算法称之为比较排序算法。其中上述排序算法...
2020-01-11 16:53:34
120
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之桶排序(9)
本篇博客是今天笔者写的最后一篇排序算法的博客了。桶排序(bucket sort)假设输入数据服从均匀分布,平均情况下其时间代价为O(n)。计数排序假设数据都属于一个小区间的整数,而桶排序则假设数据均匀、独立分布在[0,1)上。桶排序将区间[0,1)划分为n各大小相同的子区间,称之为桶,然后将数组中的所有元素都放在对应的桶中。为了得到排序结果,先对桶中的元素进行排序,然后依次遍历每个桶把桶中的元素...
2020-01-11 16:23:20
163
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之基数排序(8)
基数排序(radix sort)是一种用于卡片排序机上的算法。对待排序数组A,算法先按最低有效位来进行排序,即首先根据所有元素的个位上的值进行排序,然后再根据十位上的值进行排序,直至超过数组中最大元素的宽度。为了确保基数排序算法的正确性,一位数排序算法必须是稳定的,即若两个数的某一位上的值一样,那么排序后这两个数的相对位置也不能发生改变。基数排序只是一种策略,并没有给出具体的代码实现,其伪代码如...
2020-01-11 16:02:11
265
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之计数排序(7)
接下来的三篇博客里,笔者将会简单聊聊三种线性时间复杂度的排序算法,即计数排序、基数排序以及桶排序,均出自《算法导论》。计数排序假设数组A中的所有元素都是0~k区间内的一个整数,其中k为某个整数值。计数排序的思想是对每一个数组元素x,计算小于x的元素的个数。计数排序的实现过程分为三步:计算数组A中每个元素出现的次数。统计数组A中存在多少个元素小于等于A中的指定元素。从后往前依次遍历数组A,...
2020-01-11 15:30:17
160
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之快速排序(6)
忙完论文的事,笔者终于有时间继续学习算法了。以前一直觉得快速排序(Quick Sort)很神秘,今天笔者就学习一下《算法导论》关于快速排序的部分内容。快速排序是一种最快情况时间复杂度为O(n^2)的排序算法,但是其平均性能较好,且为原址排序算法,因此像Java的Arrays类中的静态函数sort就是使用快速排序实现的。与归并排序算法一样,快速排序也是使用了分治思想。对一个数组A[p…r]快速排序...
2020-01-11 11:26:35
183
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之堆排序(5)
近日,笔者忙里偷闲,学习了下堆排序(Heap-Sort)。堆排序算法,就时间复杂度而言,堆排序跟合并排序(Merge-Sort)算法是一样的,都是O(n * log(n));就排序方式而言,堆排序跟插入排序(Insertion-Sort)一样,都具有空间原址性。这里首先介绍下堆的概念。堆,或者称为二叉堆,可以看作是一棵近似的完全二叉树。在这棵树中,除了最底层以外,该树是完全充满的,而且是从左至右...
2019-10-26 11:25:29
176
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之冒泡排序(1)续
今天下午笔者在网上查阅算法时,无意间发现了一个算法,名曰“鸡尾酒排序”。啥?没听过啊,点击去一看,该算法是冒泡排序算法的一种改进。在每一次循环的时候,从当前剩下未排序的数组里选择最小值放在数组前面,最大值放在数组后面(这里的前面与后面指的是在未排序部分)。因此,该算法本身外层迭代次数为数组长度的一半。例如,对于原始数组14, 12, 18, 12, 1, 6, 18, 4, 0, 2, 0...
2019-10-24 18:52:17
160
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之合并排序(4)续
笔者在上一篇博客中谈到了合并排序算法,其是分治思想的一种体现。在《算法导论》后的一道例题上,笔者看到了一道例题如下:假设A[1…n]是一个由n个不同元素构成的数组。若i<j且A[i]>A[j],则对偶(i, j)称为数组A的一个逆序对。给出一个确定在n个元素的任何排列中逆序对数量的算法,最坏的情况是O(n * log(n))(提示,修改合并排序算法)。首先,通过最简单方式,即双...
2019-10-17 13:58:23
253
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之合并排序(4)
在前三篇博客中,笔者分别讲述了冒泡排序、选择排序以及插入排序,这三种排序算法是比较基本算法,原理也好,实现也罢,难度都不是很大。笔者在这篇博客中,打算聊聊归并排序(Merge-Sort)。《算法导论》中提到,归并排序是分治(Divide-and-Conquer)思想的第一个应用。分治思想中,对于一个给定的问题,将该问题分解为多个子问题,每个子问题又可以向下继续分解,直到分解出的子问题十分容易地就...
2019-10-16 23:24:32
554
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之插入排序(3)
笔者在前面两篇文章当中简单介绍了下冒泡排序以及选择排序,这里顺带介绍下插入排序(Insertion-Sort)。举个栗子(出自《算法导论》第三版)。一堆无序的扑克牌,从上面抽取第一张,放在手上,然后抽取第二张,比较和第一张的大小。若小于第一张扑克,则放在第一张扑克的前面,否则放在第一张扑克的后面。然后抽取第三张,若小于第一张扑克,在放在最前面;若大于等于第一张扑克且小于等于第二张扑克,则放在两...
2019-10-16 20:22:03
150
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之选择排序(2)
笔者在上一篇博客中回顾了下冒泡排序(Bubble-Sort),这里写篇博客讲讲选择排序(Selection-Sort)。选择排序在每一次的迭代中,不直接交换相邻元素,而是从数组中选择出当前数组中的最小值(最大值)的索引,并于当前待排序位置的索引进行比较。若不相等,则交换之,亦即会出现如下情况当前最小值: 3 -> [7, 36, 18, 7, 39, 35, 12, 29, 37, 3,...
2019-10-16 19:49:39
181
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 浅谈排序算法之冒泡排序(1)
今日打算入手学习一下算法相关的东西,就先从排序算法说起。冒泡排序(Bubble-Sort)应该是大学里C语言课堂上学到的最早几个排序算法之一的吧。考虑排序后数组为升序排序的情况。冒泡排序,就是在每一次迭代循环中,从当前剩下的数组中选择最小或者最大的值,并将其移动带数组前面或者后面,直到整个数组呈现出升序排序。由于算法本身偏于简单,因此这里就没有动态图来做演示(主要是因为自己不会做)。另外,由于笔...
2019-10-16 19:26:47
302
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java 比较器简记(1)
上午一个朋友在群里推荐每日打卡,题目《找到K个最接近的元素》,这道题推荐使用二分查找来做。这里写这边文章的主要目的是为了记录Java的比较器是怎样进行比较的。因为官方推荐了一种做法,使用Java8的新特性—Lambda表达式来做,觉得很有意思,就花了些时间琢磨了一下,并记录下来。通常情况下,若要对数组元素进行排序,Java中的规定是元素对应的类要么实现Comparable< T >接...
2019-10-10 15:56:49
258
1
原创 final关键字的一些思考
在传统的编程思想中,关键字修改的变量一旦被赋值,就没有办法通过正常代码进行修改。那有没有可能通过非正常代码来修改下呢?
2024-04-29 17:03:50
227
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人