数据结构与算法
总结与学习数据结构与算法中的知识点。
TransientYear
凑个32块的整
展开
-
二分查找总结
文章目录原理及步骤代码模板及其改进编程练习标准的二分查找实战1:猜数字大小二分查找(Binary Search)也叫作折半查找。二分查找有两个要求:一个是数列有序另一个是数列使用顺序存储结构(比如数组)原理及步骤二分查找法实质上是不断地将有序数据集进行对半分割,并检查每个分区的中间元素。帮组理解漫画。实现步骤:将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功...原创 2019-11-22 15:26:28 · 1120 阅读 · 0 评论 -
五大常用算法之-贪心算法
文章目录基本概念贪心算法的基本思路算法存在的问题贪心算法适用的问题贪心选择性质贪心算法的实现框架例题分析应用举例基本概念贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,它所做出的仅仅是在某种意义上的局部最优解。贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具...原创 2019-11-19 20:45:42 · 504 阅读 · 1 评论 -
五大常用算法之-动态规划
文章目录基本概念基本思想与策略基本概念动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。基本思想与策略基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,...原创 2019-11-11 17:31:29 · 405 阅读 · 0 评论 -
五大常用算法之-回溯法
文章目录基本思想利用回溯法解决问题用递归回溯代码框架用迭代回溯代码框架应用举例0-1 背包问题数字全排列回溯法 在最优解,排列组合和解空间搜索中存在典型应用。我们知道动态规划和贪婪算法都要求无后效行,即子问题的解是当前的最优解,不能回退。当这种要求得不到满足时,一种的通常做法是采用回溯的方法进行求解。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足...原创 2019-11-07 11:28:46 · 3695 阅读 · 1 评论 -
十大排序算法 图解 (python&java)
作者 | 不该相遇在秋天转载自五分钟学算法(ID:CXYxiaowu)注: 原文使用 java 编程语言,这里我使用 python。文章目录No.1 冒泡排序图解冒泡排序代码实现No.1 冒泡排序冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也可以从右往左冒泡,看心情),依次比较相邻的两个数的大小(到底是比大还是比小也看你心情)。图解冒泡...转载 2019-06-27 11:45:44 · 417 阅读 · 0 评论 -
其他算法-051-构建乘积数组
文章目录题目描述分析代码题目描述给定一个数组A[0,1,...,n−1]A[0,1,...,n-1]A[0,1,...,n−1],请构建一个数组B[0,1,...,n−1]B[0,1,...,n-1]B[0,1,...,n−1],其中B中的元素B[i]=A[0]∗A[1]∗...∗A[i−1]∗A[i+1]∗...∗A[n−1]B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...原创 2019-12-19 15:37:49 · 193 阅读 · 0 评论 -
其他算法-046-孩子们的游戏-圆圈中最后剩下的数(约瑟夫环)
文章目录题目描述分析代码题目描述每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数...原创 2019-12-19 14:19:28 · 459 阅读 · 0 评论 -
其他算法-043-左旋转字符串
文章目录题目描述分析代码题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!分析方法一,移动。把前 length%nlength\%nlengt...原创 2019-12-18 16:41:42 · 176 阅读 · 0 评论 -
其他算法-041-和为S的连续正数序列(滑动窗口思想)
文章目录题目描述分析代码题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?输出所有和为S的连续正数序列。序列内按照...原创 2019-12-18 14:13:04 · 191 阅读 · 0 评论 -
其他算法-033-丑数
文章目录题目描述分析代码题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析方法一:暴力搜索,时间复杂度不满足要求。方法二:动态规划方法,当前第n个丑数等于,前n-1个丑数中乘2,乘3,乘5中最小的数,且不再前n-1个丑数之中。代码clas...原创 2019-12-17 13:59:42 · 170 阅读 · 0 评论 -
其他算法-032-把数组排成最小的数
文章目录题目描述分析代码题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析方法一:乍一看此题似乎是一个全排列问题,当然可以用回溯进行全排列,但是时间复杂度为O(n!).方法二:代码...原创 2019-12-16 19:58:35 · 231 阅读 · 2 评论 -
其他算法-031-整数中1出现的次数(从1到n整数中1出现的次数)
文章目录题目描述分析代码题目描述求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。分析方法一:记录单个数字所包含1的个数,相加...原创 2019-12-10 19:23:18 · 257 阅读 · 0 评论 -
其他算法-028-数组中出现次数超过一半的数字
文章目录题目描述分析代码题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析方法一:利用python字典,记录每个出现的数字的counter,再遍历得到结果,时间复杂度为O(n),空间复杂度为O(n)。并且此方法可以扩...原创 2019-12-10 16:01:07 · 188 阅读 · 0 评论 -
其他算法-013-调整数组顺序使奇数位于偶数前面
文章目录不考虑相对位置题目描述分析代码考虑相对位置题目描述分析代码不考虑相对位置题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。分析使用双指针,利用快排的一次划分思想,很快得到答案。代码# -*- coding:utf-8 -*-class Solution: def reOrderArray(se...原创 2019-12-10 11:55:08 · 177 阅读 · 0 评论 -
其他算法-002-替换空格
文章目录题目描述分析代码题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy分析思路一:从头到尾遍历字符串做替换,时间复杂度为O(n2),效率低。思路二:从尾到头遍历字符串做替换,时间复杂度为O(n),效率高。利用python str内置`方法,简易解决。时空...原创 2019-12-06 16:30:57 · 193 阅读 · 0 评论 -
位运算-012-数值的整数次方
文章目录题目描述分析题目描述给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。保证base和exponent不同时为0。分析解法一: 单层循环,时间复杂度O(abs(exponent))解法二:an={a(n/2)∗a(n/2), n为z(t)=Cci...原创 2019-12-02 18:37:03 · 202 阅读 · 0 评论 -
位运算-011-二进制中1的个数
文章目录题目描述分析代码题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析解法一:python对整数二进制表示,由于它自身语言的特殊性,对负数的二进制表示也是比较特殊的。>>> bin(5)'0b101'>>> bin(-5)'-0b101'>>> bin(-5 & 1)'0b1'&g...原创 2019-12-02 17:32:45 · 315 阅读 · 0 评论 -
位运算-040-数组中只出现一次的数字
文章目录题目描述分析代码原题:260. 只出现一次的数字 III (leetcode)题目描述给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。示例 : 输入: [1,2,1,3,2,5] 输出: [3,5]注意:结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。你的算法应该具有线性时间复杂度。你能...原创 2019-12-03 17:27:48 · 183 阅读 · 0 评论 -
利用位操作进行特殊数组的查找-leetcode
文章目录只出现一次的数字题目描述分析代码只出现一次的数字 II题目描述分析及代码只出现一次的数字原题:136. 只出现一次的数字题目描述给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?分析利用两个相同正数异或抵消,以及异或具有交换律的性质,数组里所有数字全部异...原创 2019-12-03 15:35:04 · 187 阅读 · 0 评论 -
python位操作以及位操作的相关性质
文章目录python 中整型的存储位操作相关性质python 中整型的存储在 python2 时代,整型有 int 类型和 long 长整型,长整型不存在溢出问题,即可以存放任意大小的整数。在 python3 后,统一使用了长整型。这就使得python3 中整型数据永远不会溢出,这要内存放得下。这种长整型处理机制的可能性,可以参见这篇博文。由于这种对长整形数据特殊的处理机制,致使我们是不知道...原创 2019-12-03 13:30:08 · 821 阅读 · 0 评论 -
二分查找-037-数字在排序数组中出现的次数
文章目录题目描述分析代码题目描述统计一个数字在排序数组中出现的次数。分析在有序数组中的查找,二分查找具有时间复杂度上的优势。这里直接利用二分查找来分别查找目标值的左右边界来确定出现的次数,那么时间复杂度为O(logn)。代码# -*- coding:utf-8 -*-class Solution: def GetNumberOfK(self, data, k): ...原创 2019-11-28 21:50:03 · 370 阅读 · 0 评论 -
二分查找-006-旋转数组的最小数字
文章目录题目描述分析代码题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。分析数组部分有序,无重复元素,原题可以理解为查找数组中不大于最后一个元素的最小值,...原创 2019-11-27 21:39:37 · 229 阅读 · 0 评论 -
搜索算法-001-二维数组中的查找
文章目录题目描述分析代码题目描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。分析根据二维数组的大小特性:代码# -*- coding:utf-8 -*-class Solution: # array 二维列表 def ...原创 2019-11-21 13:19:40 · 530 阅读 · 0 评论 -
动态规划-01背包
文章目录题目描述分析题目描述给定n个重量为w1,w2,⋯ ,wnw_1,w_2,\cdots,w_nw1,w2,⋯,wn,价值为v1,v2,⋯ ,vnv_1,v_2,\cdots,v_nv1,v2,⋯,vn的物品和容量为C的背包,求这个物品中一个最有价值的子集,使得在满足背包的容量的前提下,包内的总价值最大。01背包指的是物品装或者不装,装且只能装一次。分析方法一:利用回...原创 2019-12-12 21:10:13 · 304 阅读 · 0 评论 -
动态规划-067-剪绳子
文章目录题目描述示例分析动态规划贪心算法代码动态规划贪心算法题目描述给你一根长度为n的绳子,请把绳子剪成m段(m、n都是整数,n>1并且m>1),每段绳子的长度记为k[0],k[1],...,k[m]。请问k[0]xk[1]x...xk[m]可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。、示例输入一个数n,意...原创 2019-11-18 13:20:13 · 408 阅读 · 0 评论 -
动态规划-052-正则表达式匹配
文章目录题目描述分析题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配分析方法一:动态规划。方法二:分析递归。每次从字符串里取出一...原创 2019-11-15 20:38:17 · 203 阅读 · 0 评论 -
动态规划-030-连续子数组的最大和
文章目录题目描述分析题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,...原创 2019-11-13 16:05:35 · 207 阅读 · 0 评论 -
动态规划-010-矩形覆盖
文章目录题目描述分析题目描述我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?分析利用动态规划算法求解此问题:阶段划分,状态表示,状态转移方程:F(n) = F(n-1) + F(n-2) &nbs...原创 2019-11-12 22:03:54 · 436 阅读 · 0 评论 -
动态规划-008-跳台阶
文章目录跳台阶问题题目描述分析代码变态跳青蛙题目描述分析代码跳台阶问题题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析完全同 Fibonacci 数列。确定状态转移公式:阶段定义:跳n阶台阶需要总可能跳法为 f(n)。那调到第n阶台阶的最后一步跳法无非是从第n-1阶台阶跳一步上去的,或者从第n-2阶台...原创 2019-11-12 15:41:19 · 260 阅读 · 0 评论 -
动态规划-007-斐波拉契数列
文章目录题目描述分析代码题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=39分析利用动态规划算法求解此问题:阶段划分,状态表示,状态转移方程:F(n) = F(n-1) + F(n-2)边界条件:F(0) = 0, F(1) = 1.解决此问题的三种方式:递归-时间复杂度 O(2n2^n2n)备忘录...原创 2019-11-12 14:39:05 · 363 阅读 · 0 评论 -
回溯法-组合总和 II
文章目录题目描述示例分析代码题目描述给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。说明:所有数字(包括目标数)都是正整数。解集不能包含重复的组合。示例输入: candidates = [10,1,2,7,6,1,5], tar...原创 2019-11-16 20:54:54 · 340 阅读 · 0 评论 -
回溯法-066-机器人的运动范围
文章目录题目描述示例分析代码题目描述地上有一个m行和n列的方格。一个机器人从坐标0,0的格子开始移动,每一次只能向左,右,上,下四个方向移动一格,但是不能进入行坐标和列坐标的数位之和大于k的格子。示例例如,当k为18时,机器人能够进入方格(35,37),因为3+5+3+7 = 18。但是,它不能进入方格(35,38),因为3+5+3+8 = 19。请问该机器人能够达到多少个格子?分析依...原创 2019-11-09 20:07:23 · 261 阅读 · 0 评论 -
回溯法-065-矩阵中的路径
文章目录题目描述示例分析代码题目描述请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。示例例如:a b c es f c sa d e e矩阵中包含一条字符串"bcced“的路径,但是矩阵中不包含”a...原创 2019-11-09 17:10:05 · 518 阅读 · 0 评论 -
回溯法-全排列
文章目录无重复数字的全排列题目描述示例分析代码有重复数字的全排列题目描述示例分析代码元素奇偶相间的排列题目描述分析代码无重复数字的全排列题目描述给定一个没有重复数字的序列,返回其所有可能的全排列。示例输入: [1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]分析利用 回溯法排列树模板 ,没有限定...原创 2019-11-08 20:01:14 · 897 阅读 · 0 评论 -
回溯法-N皇后问题
文章目录题目描述示例分析代码题目描述n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击。不能相互攻击就是N个皇后两两不能同行同列同对角线。示例示例:输入: 4输出: [[".Q…", // 解法 1“…Q”,“Q…”,“…Q.”],["…Q.", // 解法 2“Q…”,“…Q”,“.Q…”]]解释: 4 皇后问...原创 2019-11-08 17:50:05 · 435 阅读 · 0 评论 -
回溯法-01背包
文章目录题目描述分析代码题目描述给定一组多个(n)物品,每种物品都有自己的重量(w1,w2,...,wnw_1,w_2,...,w_nw1,w2,...,wn)和价值(v1,v2,...,vnv_1,v_2,...,v_nv1,v2,...,vn),在限定的总重量/总容量(C)内,选择其中若干个(也即每种物品可以选0个或1个),设计选择方案使得物品的总价值最高。分析当物品数不多...原创 2019-11-08 15:02:34 · 360 阅读 · 0 评论 -
回溯法-LeetCode 子集和子集II
文章目录题目描述示例分析代码题目描述给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。示例输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]分析利用回溯法子集树模板,调整参数传入,并且无约束条件即无冲突。具体分析请见这篇博客。代码class Soluti...原创 2019-11-08 13:56:43 · 1092 阅读 · 0 评论 -
排序-029-最小的K个数(堆排序)(快速排序)
文章目录题目描述分析解题思路一:排序思想解题思路二:快排思想解题思路三:堆排思想代码解题思路一:排序思想解题思路二:快排思想解题思路三:堆排思想题目描述输入n个整数,找出其中最小的K个数。例如输入 4,5,1,6,2,7,3,8 这8个数字,则最小的4个数字是 1,2,3,4 。分析解题思路一:排序思想思路: 按照升序排序,然后取前K个数,就是我们最终想要的到的结果,现在较好一点的排序...原创 2019-10-31 13:05:16 · 745 阅读 · 2 评论 -
排序-035-数组中的逆序对(冒泡排序)(归并排序)
文章目录题目描述分析代码题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007分析寻找数组中的逆序对数,其实问题的实质是数组的排序(冒泡排序以及归并排序),所以衍生出两种解决方式:冒泡排序:交换次数就是逆序对数,换句换说就是交换...原创 2019-10-29 21:49:19 · 1039 阅读 · 0 评论 -
哈希表-034-第一个只出现一次的字符的位置
文章目录题目描述分析代码题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).分析题目简单,利用哈希表,遍历一遍做词频统计,第二遍得结果。也可以利用python str对象计数count方法,但时间复杂度高,运行都可通过。代码使用哈希# -*- coding:utf-...原创 2019-11-05 16:45:13 · 188 阅读 · 0 评论