编程题汇总
文章平均质量分 58
frostjsy
越努力,越幸运
展开
-
CodeTop整理-回溯篇
【代码】CodeTop整理-回溯篇。原创 2023-07-12 23:33:12 · 244 阅读 · 0 评论 -
CodeTop整理-树篇
【代码】CodeTop整理-树篇。原创 2023-07-10 23:22:48 · 246 阅读 · 0 评论 -
CodeTop整理-链表篇
【代码】CodeTop整理-链表篇。原创 2023-07-05 23:25:50 · 144 阅读 · 0 评论 -
CodeTop整理-排序篇
【代码】CodeTop整理-排序篇。原创 2023-07-05 23:08:29 · 409 阅读 · 0 评论 -
CodeTop整理-动态规划篇
返回一个数组 [r1, c1, r2, c2],其中 r1, c1 分别代表子矩阵左上角的行号和列号,r2, c2 分别代表右下角的行号和列号。若有多个满足条件的子矩阵,返回任意一个均可。给定一个正整数、负整数和 0 组成的 N × M 矩阵,编写代码找出元素总和最大的子矩阵。最大和求开始点和结束点。原创 2023-07-05 22:06:06 · 603 阅读 · 0 评论 -
CodeTop整理-字符串篇
输入: words = ["i", "love", "leetcode", "i", "love", "coding"], k = 2。输入: strs = ["eat", "tea", "tan", "ate", "nat", "bat"]例如,"ace" 是 "abcde" 的子序列,但 "aec" 不是 "abcde" 的子序列。输出: [["bat"],["nat","tan"],["ate","eat","tea"]]输入字符串中没有额外的空格,且输入的方括号总是符合格式要求的。原创 2023-07-05 22:47:21 · 733 阅读 · 0 评论 -
CodeTop整理-数组篇
解释:在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。解释:你只需要对 [6, 4, 8, 10, 9] 进行升序排序,那么整个表都会变为升序排序。输入:nums = [2,6,4,8,10,9,15]原创 2023-07-05 22:49:09 · 1062 阅读 · 0 评论 -
剑指offer题目汇
这个剑指offer题目汇主要是为了方便自己查找和回顾。【1-10python实现】1题目:二维数组中的查找 2题目:替换空格3题目:从尾到头打印链表4题目:重建二叉树5题目:用两个栈实现一个队列6题目:旋转数组中的最小数字7题目:斐波那契数列8题目:跳台阶9题目:变态跳台阶10题目:矩阵覆盖【11-20python实现】11题目.二进制中1的个数12题目.数值的整数次方13题目.调整数组顺序使奇数位于偶数前面14题目.链表中的倒数第K个节点..原创 2021-02-18 00:26:48 · 97 阅读 · 0 评论 -
其他编程题专题
56. 合并区间给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: intervals = [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例2:输入: intervals = [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。注意:输入类型已于2019年4月15日.原创 2020-11-11 23:15:03 · 112 阅读 · 0 评论 -
滑动窗口专题
1、滑动窗口要素双向指针,条件判断,暴力求解2、模板3、实例167. 两数之和 II - 输入有序数组给定一个已按照升序排列的有序数组,找到两个数使得它们相加之和等于目标数。函数应该返回这两个下标值 index1 和 index2,其中 index1必须小于index2。说明:返回的下标值(index1 和 index2)不是从零开始的。你可以假设每个输入只对应唯一的答案,而且你不可以重复使用相同的元素。示例:输入: numbers = [2, 7, 1...原创 2020-11-10 23:55:01 · 171 阅读 · 0 评论 -
字符串专题
3. 无重复字符的最长子串难度:中等题目描述给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的原创 2020-10-20 00:47:27 · 664 阅读 · 0 评论 -
树专题
1、树基本概念给定一个无向图G,如果:i)G是连通的;ii)G是无环的,则G是一棵树。满二叉树:叶子节点全都在最底层,除了叶子节点之外,每个节点都有左右两个子节点 完全二叉树:叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大 二叉查找树:Binary Search Tree,二叉查找树要求,在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值 平衡查找树:二叉树中任意一个节点的左右子树的高度原创 2020-10-16 00:26:52 · 284 阅读 · 0 评论 -
链表专题
1、链表链表有单链表,双链表,环形链表;链表主要功能是将离散的地址通过指针连接起来。2、原创 2020-10-13 23:50:27 · 234 阅读 · 0 评论 -
dfs与bfs搜索专题
1、dfs与bfsdfs与bfs一般存在于树搜索和图搜索中,dfs一般以递归的方式实现;bfs用一队列来进行搜索;数一般以链表的方式存储;图存储一般有两种方式:邻接矩阵,邻接表。回溯法 :一种通过探索所有可能的候选解来找出所有的解的算法。如果候选解被确认不是一个解的话(或者至少不是最后一个解),回溯算法会通过在上一步进行一些变化抛弃该解,即回溯并且再次尝试。https://leetcode-cn.com/problems/permutations/solution/quan-pai-lie-by-le原创 2020-10-12 00:49:42 · 238 阅读 · 0 评论 -
动态规划专题
1、动态规划要素动态规划的三要素:最优子结构,边界和状态转移函数,最优子结构是指每个阶段的最优状态可以从之前某个阶段的某个或某些状态直接得到(子问题的最优解能够决定这个问题的最优解),边界指的是问题最小子集的解(初始范围),状态转移函数是指从一个阶段向另一个阶段过度的具体形式,描述的是两个相邻子问题之间的关系(递推式) 重叠子问题,对每个子问题只计算一次,然后将其计算的结果保存到一个表格中,每一次需要上一个子问题解时,进行调用,只要o(1)时间复杂度,准确的说,动态规划是利用空间去换取时间的算法.原创 2020-10-10 09:36:51 · 258 阅读 · 1 评论 -
二分专题
1、二分性质70%单调性 95%存在两段性2、二分模板3、相关题目69.实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例1输入: 4输出: 2示例2输入: 8输出: 2说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。思路:1、确定二分的边界, 0-x之间2、编写二分的代码框架3、设计check函数4、确定.原创 2020-10-10 09:05:02 · 316 阅读 · 0 评论 -
回文数字
1、题目:输出一个整数,表示通过插入若干个正整数使数组 a 回文后,数组 a 的数字和的最小值。eg:输入:851 23 52 97 97 76 23 51输出:5982、解题思路:思路一:动态规划。dp[i][j]表示i–j之间构成回文串的所有数字之和。那么状态转移方程就是:if(a[i]==a[j]) dp[i][j] = dp[i+1][j-1]+2*a[i];else dp[i][j] = min(dp[i+1][j]+2*a[i], dp[i][j-1...原创 2020-08-24 00:07:01 · 613 阅读 · 0 评论 -
剑指offer-题目-思路-python实现61-67
61.二叉搜索树的第K个节点给定一棵二叉搜索树,请找出其中的第k小的结点。例如,(6,3,8,2,5,7,9)中,按结点数值大小顺序第三小结点的值为5。给定二叉树: 6 / \ 3 8/ \ / \2 5 7 9 思路:二插搜索树的中序遍历节点为排序数组,中序遍历节点,直接返回第k个数即可class TreeNode: def __init__(self,val): self.val=val self...原创 2020-08-10 23:48:24 · 143 阅读 · 0 评论 -
剑指offer-题目-思路-python实现51-60
51.构建乘积数组给定一个数组A[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]。不能使用除法。先求前向乘积列表t_forword=a[0]*a[1]*...*a[i-1];存入b再求后项乘积列表t_back=a[len(a)-1]*a[len(a)-1]*...*a[i+1];b[i]*t_back得到最后结果class Solution: def mult原创 2020-08-10 23:38:42 · 259 阅读 · 0 评论 -
剑指offer-题目-思路-python实现41-50
41.和为S的连续正数序列输出所有和为S的连续正数序列。序列内按照从小至大的顺序,序列间按照开始数字从小到大的顺序。思路:因为是连续的整数序列,故从1开始;对于一个子序列,如果该子序列的值小于给定的值,则应该加上下一个值,如果大于该值,则去除序列中的第一个值,当序列中第一个值大于设定值的一半时,停止循环class Solution: def findContinueSeq(self,sumA): a,b=1,2 res=[] while原创 2020-08-10 23:24:43 · 325 阅读 · 0 评论 -
剑指offer-题目-思路-python实现31-40
题目31:从1到n的整数中1出现的个数比如,1-16中,1出现9次,分别是1,10,11,12,13,14,15,16。思路:1-n个数中,循环除以10,余数为1,则count+=1;class Solution: def numOf1(self,n): num=0 for i in range(1,n+1): while i>0: if i%10==1:原创 2020-08-03 01:43:33 · 191 阅读 · 0 评论 -
排序算法python实现汇总
目录01冒泡排序02快速排序03简单插入排序 04希尔排序05简单选择排序 06归并排序07计数排序08桶排序09基数排序10堆排序01冒泡排序1、比较相邻的元素。如果第一个比第二个大,就交换它们两个;2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;3、针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。class Solution: def bubble...原创 2020-07-30 00:09:35 · 238 阅读 · 0 评论 -
剑指offer-题目-思路-python实现21-30
21题目.栈的压入、弹出输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:用一个栈来存储出栈的值,如果遇到出栈的值和入栈的值相等或者临时栈的值和入栈的值相等,就去除里面的值,最后辅助栈和弹出序列都为空,则满足条件假设栈为a,出栈为b,构原创 2020-07-26 20:06:43 · 199 阅读 · 1 评论 -
剑指offer-题目-思路-python实现11-20
11题目.二进制中1的个数输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。例如,9表示1001,因此输入9,输出2。思路:如果整数不等于0,那么该整数的二进制表示中至少有1位是1。1、若这个数最右一位是1,那么该数减去1后,最右边一位变成了0,其他位不变。2、若最右一位是0,最右边的1在第m位,那么该数减去1,第m位变成0,m右边的位变成1,m之前的位不变。综上,一个整数减去1,都是把最右边的1变成0,如果它后面还有0,那么0变成1。把一个整数减去1,与该整数做位运算原创 2020-07-26 19:19:33 · 190 阅读 · 0 评论 -
剑指offer-题目-思路-python实现1-10
1题目:二维数组中的查找 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。思路:类似于二分查找,取右上角的元素col=len(array)-1,row=0,如果该元素小于目标元素,col-1向左移动,该元素大于目标元素,row+1向下移动,若相等,则找到目标元素,若不等,则返回-1。class Solution: def find(...原创 2020-07-26 18:51:47 · 180 阅读 · 0 评论 -
最小的k个数python实现
一、问题:最小的K个数输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。二、解题思路思路1:最简单的方案,对数组进行排序,取最小的k个思路2:借鉴快速排序的思想,找partition的基准点povit,比较povit和k值的大小思路3:大数据处理的思想,创建一个大小为k的数据容量,如果容器未满,直接存入容器中,如果容器已满,和最大值进行比较,替换思路4:构建堆,返回最小的k个元素三、程序实现impor原创 2020-07-15 00:42:07 · 1420 阅读 · 0 评论 -
RecursionError: maximum recursion depth exceeded in comparison
写递归时报错:RecursionError: maximum recursion depth exceeded in comparisonclass Solution: def partition(self,a,left,right): pivot=left # 划分参考数索引,默认为第一个数为基准数,可优化 while (left <right): while (left<right and a[right]>=a[p原创 2020-07-13 23:11:11 · 527 阅读 · 0 评论