![](https://img-blog.csdnimg.cn/2019090207045072.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法学习
文章平均质量分 97
IMUHERO
持续学习者
展开
-
算法学习(十)动态规划(3)
目录一、01背包问题二、leetcode416. 分割等和子集二、leetcode300. 最长上升子序列四、最长公共子序列(LCS)五、剑指offer51.构建乘积数组今天继续进行动态规划的总结,在前面一些习题的训练下,我们已经对动态规划的模型基本熟练,接下去举几个动态规划领域非常经典,同时富有挑战性的问题。一、01背包问题1.题目:* 01背包问题*...原创 2019-07-12 00:03:03 · 296 阅读 · 0 评论 -
算法学习(十)动态规划(2)
目录一、leetcode 70.爬楼梯二、leetcode 343. 整数拆分三、leetcode198. 打家劫舍经过上一小节对斐波那契数列的解答,已经对动态规划有了初步的概念,接下去将通过几道简单的例题来巩固动态规划思想。一、leetcode 70.爬楼梯1.题目:假设你正在爬楼梯。需要n阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的...原创 2019-07-11 00:04:32 · 239 阅读 · 0 评论 -
算法学习(十一)贪心算法
一、基本概念:在寻找最优解时候,有很多常用的办法,比如说:贪心,分治,回溯,动态规划等等。这些思想有各自的优势,也相互联系,相互区别。贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。 也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。二、举例说明:1.Leetcode 455 号问题: 分发饼干题目描述假设你是一位很...原创 2019-07-10 00:25:12 · 226 阅读 · 0 评论 -
算法学习(十)动态规划!!!
一、动态规划的思想1.先上一波官方解读提提神:动态规划(英语:Dynamic programming,简称DP)是一种在数学、管理科学、计算机科学、经济学和生物信息学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。动态规划常常适用于有重叠子问题和最优子结构性质的问题。官方术语太多?不能理解?what are you fucking say???? :)往下看,...原创 2019-06-15 00:47:35 · 155 阅读 · 0 评论 -
算法学习(九):回溯算法
目录一、leetcode 17. 电话号码的字母组合二、剑指offer 64.矩阵中的路径三、剑指offer 65.机器人的运动范围一、基本概念一个函数在进行递归调用时,总是从一个入口进去,并逐级深入,直到到达递归终止条件并逐级返回。在这个返回的过程中做出一些操作,就是回溯。在leetcode第17题中,就可以使用回溯算法快速解决,下面给出题目和解答。一、leetcod...原创 2019-05-25 23:21:41 · 912 阅读 · 0 评论 -
排序算法(七):堆排序
一、排序方法:堆排序二、基本原理1.实质:堆排序实质上最重要的在于实现一个堆,而不是设计排序的方法。2.本篇文章采用最大二叉堆的形式完成排序(当然你也可以设计一个最小堆)。实现二叉堆最为经典的方法,是使用数组构建一颗满二叉树,二叉树的父亲节点总是比他的子节点要来得大(注意:第二层不一定比第三层的元素要大,比如图中第7和第9节点)3.实现二叉堆的核心在于shiftDown...原创 2019-03-24 15:58:39 · 177 阅读 · 0 评论 -
排序算法(六):快速排序
目录一、排序方法:二、快速排序三、双路快速排序(代码中解决以上三个问题)四、三路快速排序(更高速的改进)五、剑指offer26 最小K个数一、排序方法:快速排序,双路快速排序,三路快速排序二、快速排序1.实现原理:选择一个数作为标定点(如图中的4) 同下一个元素进行比较(通过i进行遍历,<v放在l和j 之间,>v放在j之后) 完成遍历后,...原创 2019-03-24 15:45:57 · 606 阅读 · 0 评论 -
排序算法(二):选择排序
一、排序方法:选择排序二、基本原理第一轮:从第二个位置开始,与第一个位置的元素相比,找到最小的数与第1个数交换,右移继续比较直至到达最后一个数;第二轮:从第三个位置开始,与第二个位置的元素相比,找到最小的数与第2个数交换,右移继续比较直至到达最后一个数;第三轮:从第四个位置开始,与第三个位置的元素相比,找到最小的数与第3个数交换,右移继续比较直至到达最后一个数; ...原创 2019-03-24 15:10:00 · 102 阅读 · 0 评论 -
排序算法(三):插入排序
一、排序方法:插入排序二、基本原理(不断比较前一个元素,并选择合适的位置插入)第一轮:从第二个位置开始,与第一个位置的元素相比,找到合适的位置插入;第二轮:从第三个位置开始,与前两个位置的元素相比,找到合适的位置插入;第三轮:从第四个位置开始,与前三个位置的元素相比,找到合适的位置插入; ...原创 2019-03-24 15:16:14 · 149 阅读 · 0 评论 -
排序算法(四):希尔排序
一、排序方法:希尔排序二、基本原理(实质是改进版的插入排序,由于间隔排序使得数组基本有序,所以在插入间隔较小时,往往能够提前终止向前寻找插入位置。)关于希尔排序increment(增量)的取法。 增量increment的取法有各种方案。最初shell提出取increment=n/2向下取整,increment=increment/2向下取整,直到increment=...原创 2019-03-24 15:23:46 · 275 阅读 · 0 评论 -
排序算法(五):归并排序
一、排序方法:冒泡排序二、基本原理思考:归并排序本质是将N个元素进行2分,直至剩下1个元素,分割完成耗时O(logn)。然后思考如何进行归并,若每次处理只耗时n,则可以达到O(nlogn)的时间复杂度。(1)分割,直至剩下一个元素就无须再排序(2)归并,先复制一份数组。然后用蓝色标记当前数组,两个红色标记表示复制数组的左半边第一个元素和右半边第一个元素,逐个进行比较就能够达到N这...原创 2019-03-24 15:27:57 · 219 阅读 · 0 评论 -
算法题型:数组
目录一、剑指offer(一)二维数组中的查找二、剑指offer(三十)连续子数组的最大和三、剑指offer(三十四)第一次只出现一次的字符四、剑指offer(三十五):数组中的逆序对五、剑指offer(三十七):数字在排序数组中出现的次数六、剑指offer(四十)数组中只出现一次的数字:七、剑指offer(四十二)和为S的两个数八、剑指offer(四十五)扑克牌顺子...原创 2019-08-01 18:17:37 · 176 阅读 · 0 评论 -
算法题型:高级数据结构的灵活使用
目录一、剑指offer(62)中位数一、剑指offer(62)中位数1.题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。我的解法...原创 2019-08-19 08:01:53 · 102 阅读 · 0 评论 -
算法题型:字符串
目录一、剑指offer(四十三)左旋转字符串二、剑指offer(四十四)翻转单词顺序列三、剑指offer(四十九)把字符串转换成整数一、剑指offer(四十三)左旋转字符串1.题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcX...原创 2019-08-14 18:18:01 · 180 阅读 · 0 评论 -
算法题型:位运算
目录一、题型1:不使用中间量交换两个值二、剑指offer47.求1+2+...n三、剑指offer48.不使用加减乘除做加法一、题型1:不使用中间量交换两个值//第一种方法,数学运算/* 若a=1,b=2;a = a + b;=3b = a - b;=1a = a - b;=2*///第二种方法,位异或运算/...原创 2019-08-17 15:06:02 · 140 阅读 · 0 评论 -
排序算法的稳定性
目录一、稳定性二、为什么不稳定:1.快速排序:2.希尔排序3.选择排序4.堆排序:一、稳定性稳定:冒泡排序、插入排序、归并排序、不稳定:快速排序、希尔排序、选择排序、堆排序二、为什么不稳定:1.快速排序:选定的哨兵index=0,最后一定会跟中间的某个元素交换,如果中间这个元素正好是3,那么就会发生前后替换。【3(1) 4 5 ...原创 2019-09-10 11:22:56 · 140 阅读 · 0 评论 -
算法题型:模式匹配
一、剑指offer(53)正则表达式匹配1./** * 题目描述 * 请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符, * 而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。 * 例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配 */...原创 2019-08-17 19:49:53 · 188 阅读 · 0 评论 -
计数排序和桶排序
目录一、计数排序二、桶排序一、计数排序假设4,3,2,2,6,71.一次遍历找到max=7,min=2;2.计算要创建的桶大小为:max-min+1,并创建桶;3.第二次遍历,将值存进通中,每个下标对应2~7的第几位,值为这个位出现的次数;4.从头到尾输出,如果次数=0,不输出。为1,输出一次。>1,输出多次。public List<...原创 2019-09-18 15:54:37 · 217 阅读 · 0 评论 -
二分查找法+左右边界搜索
思路我相信对很多读者朋友来说,编写二分查找的算法代码属于玄学编程,虽然看起来很简单,就是会出错,要么会漏个等号,要么少加个 1。不要气馁,因为二分查找其实并不简单。看看 Knuth 大佬(发明 KMP 算法的那位)怎么说的:Although the basic idea of binary search is comparatively straightforward, the d...转载 2019-08-31 08:05:59 · 3855 阅读 · 4 评论 -
自己实现的BinarySearch
解析详见:https://blog.csdn.net/qq_37768971/article/details/100168619package IMUHERO;public class BinarySearch { // BinarySearch : 1 public int BS1(int [] arr,int val){ int l = 0; ...原创 2019-08-31 09:27:23 · 133 阅读 · 1 评论 -
大数据量:BitMap的使用
BitMapBitMap从字面的意思,很多人认为是位图,其实准确的来说,翻译成基于位的映射。在所有具有性能优化的数据结构中,大家使用最多的就是hash表,是的,在具有定位查找上具有O(1)的常量时间,多么的简洁优美。但是数据量大了,内存就不够了。当然也可以使用类似外排序来解决问题的,由于要走IO所以时间上又不行。所谓的Bit-map就是用一个bit位来标记某个元素对应的Value,...原创 2019-09-18 15:03:55 · 725 阅读 · 0 评论 -
算法题型:其他
目录一、剑指offer(三十一)整数中1出现的次数:二、剑指offer(三十三)第N个丑数:三、剑指offer(四十一)和为s的连续正数序列四、剑指offer(四十六)一、剑指offer(三十一)整数中1出现的次数:题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因...原创 2019-08-05 20:32:01 · 140 阅读 · 0 评论 -
算法题型:二叉树(leetcode+剑指offer)
目录一、111. 二叉树的最小深度二、100. 相同的树三、101. 对称二叉树四、110. 平衡二叉树五、剑指offer(24)二叉树中和为某一值的路径六、剑指offer(三十八)计算二叉树的最大深度七、剑指offer(五十六)二叉树的下一个节点八、剑指offer(五十八)按照Z型打印二叉树九、剑指offer(五十九)层序遍历二叉树(改进版,需存进双层链表中...原创 2019-08-01 00:02:29 · 859 阅读 · 0 评论 -
算法题型:栈(leetcode)
目录一、150. 逆波兰表达式求值二、71. 简化路径三、20.题目要求:四、剑指offer(5)五、剑指offer(三)从尾到头打印链表一、150. 逆波兰表达式求值1.题目描述评论 (114)题解(20)New提交记录根据逆波兰表示法,求表达式的值。有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。说明...原创 2019-08-01 00:01:46 · 161 阅读 · 0 评论 -
经典算法题型(一):排列与组合
排列 一、基本概念排序是常见的数学问题,如何使用编程罗列出所有排序的可能呢?下面结合leetcode第46题给出简单的分析思路。二、题目详情46. 全排列*给定一个没有重复数字的序列,返回其所有可能的全排列。示例:输入: [1,2,3]输出:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [...原创 2019-05-25 23:55:03 · 618 阅读 · 0 评论 -
经典算法题型(二):二维数组(平面地图)的递归操作
一、基本概念1.在算法中有一类题型经常出现,通常题目给出一个二维的数组,让你求出有多少条路径?有多少个岛屿?甚至有些题目给出二维字符数组,让你寻找是否存在某个单词。这些问题都涉及到递归回溯的相关知识,在此通过leetcode79. Word Search,和leetcode200. Number of Islands来进行总结分析。二、第79题1.题目:79. 单词搜索...原创 2019-05-26 14:40:02 · 2193 阅读 · 0 评论 -
经典算法题型(三):N皇后问题
一、基本概念1.N皇后问题是由国际象棋8皇后问题引申过来的,在国际象棋中有8行8列的棋盘,其中皇后的前进路线为:横、纵、以及双斜线,为了使皇后之间互不冲突,就要摆放皇后,使之前进路线不重叠。如下所示就是一个8皇后问题的解决方案,如图可以验证,各个皇后之间互不冲突:Q . . . . . . .. . . . Q . ...原创 2019-05-26 17:31:41 · 1501 阅读 · 0 评论 -
算法题型:双指针问题(leetcode:11/345)
目录一、Leetcode11. 盛最多水的容器二、Leetcode345. 反转字符串中的元音字母三、剑指offer42.和为S的两个乘积最小的数字一、Leetcode11. 盛最多水的容器难度:中等1.题目描述给定n个非负整数a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画n条垂直线,垂直线i的两个端点分别为...原创 2019-07-12 22:31:22 · 167 阅读 · 0 评论 -
算法题型:滑动窗口(leetcode 209)
一、209. 长度最小的子数组难度中等题目描述给定一个含有n个正整数的数组和一个正整数s ,找出该数组中满足其和≥ s的长度最小的连续子数组。如果不存在符合条件的连续子数组,返回 0。示例:输入: s = 7, nums = [2,3,1,2,4,3]输出: 2解释: 子数组[4,3]是该条件下的长度最小的连续子数组。分析:采用滑动窗口,i,j分别表...原创 2019-07-13 09:59:50 · 399 阅读 · 1 评论 -
排序算法(一):冒泡排序
一、排序方法:冒泡排序二、基本原理第一轮:从第一个位置开始,两数相比,较大的数浮在右边;右移继续比较直至到达最后一个数;第二轮:从第一个位置开始,两数相比,较大的数浮在右边;右移继续比较直至到达倒数第二个数;第三轮:从第一个位置开始,两数相比,较大的数浮在右边;右移继续比较直至到达倒数第三个数; ...原创 2019-03-24 14:58:04 · 116 阅读 · 0 评论 -
算法题型:映射(Map)
目录一、leetcode290. 单词规律二、leetcode205. 同构字符串三、leetcode451. 根据字符出现频率排序四、leetcode219. 存在重复元素 II五、 leetcode220. 存在重复元素 III六、 leetcode49. 字母异位词分组七、leetcode347:Top K Frequent Elements八、3...原创 2019-07-18 23:00:52 · 918 阅读 · 0 评论 -
算法题型:集合(Set)
目录一、217. 存在重复元素二、349:Intersection-of-Two-Arrays(I)一、217. 存在重复元素难度简单1.题目描述评论 (415)题解(27)New提交记录给定一个整数数组,判断是否存在重复元素。如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。示例 1:输入: [1...原创 2019-07-21 18:27:59 · 210 阅读 · 0 评论 -
算法题型:链表
目录一、83. 删除排序链表中的重复元素二、82. 删除排序链表中的重复元素 II三、21. 合并两个有序链表四、203.删除链表中元素e五、leetcode86. 分隔链表六、leetcode328. 奇偶链表七、leetcode 2.两数相加八、leetcode445. 两数相加 II九、剑指offer25 复杂链表的复制十、剑指offer(十六)...原创 2019-07-22 23:54:53 · 170 阅读 · 0 评论 -
二刷剑指offer
目录1.二进制中1的个数2.重建二叉树3.二叉搜索树的后叉遍历序列4.二叉树中和为某一值的路径5.数组中出现次数超过一半的数字6.整数中1出现的次数7.把数组排成最小的数8.数组中的逆序对9.两个链表的第一个公共节点10.数字在排序数组中出现的次数11.丑数12.数组中只出现一次的数字13.和为S的正数序列14.左旋转字符串15.求1+2...原创 2019-09-21 17:51:44 · 193 阅读 · 0 评论