编程训练
难题汇总,做题心得及想法
NULL001100
量变引起质变
展开
-
代码随想录算法训练营第9天|栈与队列2
【代码】代码随想录算法训练营第9天|栈与队列2。原创 2023-02-11 22:44:35 · 101 阅读 · 0 评论 -
代码随想录算法训练营第9天|栈与队列1
【代码】代码随想录算法训练营第9天|栈与队列1。原创 2023-02-10 23:55:13 · 102 阅读 · 0 评论 -
代码随想录算法训练营第8天|字符串
自己写的,用了substr,额外申请了空间。原地处理字符串方法:局部翻转,整体翻转。原创 2023-02-09 00:04:12 · 126 阅读 · 0 评论 -
代码随想录算法训练营第7天
【代码】代码随想录算法训练营第7天。原创 2023-02-07 23:11:50 · 57 阅读 · 0 评论 -
代码随想录算法训练营第6天
拉链法:发生冲突的元素存储到链表里。关键:哈希表的大小,太大?太小,易发生冲突,链表上的元素多,查找时间长。线性探测法:冲突位置的下一个放元素。原创 2023-02-06 23:50:23 · 235 阅读 · 0 评论 -
代码随想录算法训练营第4天
当前结点指向2,2指向1,1指向3。原创 2023-02-05 01:28:19 · 338 阅读 · 0 评论 -
代码随想录算法训练营第3天
建立一个虚拟头结点,指向头结点,两种操作就可以和在一起了。分为头结点和不是头结点两种操作。val,指针,构造函数。原创 2023-02-04 00:40:10 · 50 阅读 · 0 评论 -
代码随想录算法训练营第2天
设置好几个需要用到的变量:循环次数,每次循环一条边的边上数的个数,每次循环的起始位置,考虑n的奇偶性。本题,从左往右,从上至下,从右往左,从下到上,顺序是不变的。模拟,用到了二分法的循环不变量思想(什么在变,什么不变)原创 2023-02-03 01:10:10 · 179 阅读 · 0 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
【代码】代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。原创 2023-02-01 23:43:14 · 75 阅读 · 0 评论 -
母牛的故事 规律分析和时间超时的解决
#include<bits/stdc++.h>using namespace std;int n;int F[60];int f(int n){ if(n<4) return n; else F[n]=f(n-1)+f(n-3);//?F[n]=f(n-1)+f(n-3) not F[n-1]+F[n-3] 没有递推的意思 return F[n];}int main(){ while(scanf("%d",&n)&&n)原创 2020-09-24 18:19:37 · 256 阅读 · 0 评论 -
【蓝桥杯】出栈次序(递归、公式两种解法)
【蓝桥杯】出栈次序(递归、公式两种解法)。很好理解的递归。原创 2020-09-12 21:07:32 · 412 阅读 · 0 评论 -
用筛法求之N内的素数(求n内的质数以及判断n是否为质数)
#include<bits/stdc++.h>using namespace std;int main(){ int n; cin>>n; for(int i=2;i<n+1;i++){ int flag=1; for(int j=2;j<i;j++) if(i%j==0)flag=0; if(flag)cout<<i<<endl; }原创 2020-09-10 08:50:01 · 313 阅读 · 0 评论 -
【LeetCode】96. 不同的二叉搜索树 DP
不同的二叉搜索树题目描述解题思路代码题目描述题目链接:96. 不同的二叉搜索树解题思路动态规划。看的官方题解。如果是直接想动态转移方程的话不太容易,但是像题解里面推出式子来就比较好理解了。定义两个函数:G(n): 长度为 n 的序列能构成的不同二叉搜索树的个数。F(i, n): 以 i 为根、序列长度为 n 的不同二叉搜索树个数(1≤i≤n)。代码class Solution {public: int numTrees(int n) { vector&原创 2020-08-24 18:20:30 · 80 阅读 · 0 评论 -
【LeetCode】338. 比特位计数(DP)
比特位计数一级目录二级目录代码一级目录二级目录代码class Solution {public: vector<int> countBits(int num) { vector<int> dp(num+1); dp[0]=0; for(int i=0;i<=num;i++) if(i%2!=0) dp[i]=dp[i-1]+1; else dp[i]=dp[i/2]原创 2020-08-20 23:10:36 · 98 阅读 · 0 评论 -
【LeetCode】300. 最长上升子序列(DP)
最长上升子序列题目描述解题思路代码题目描述给定一个无序的整数数组,找到其中最长上升子序列的长度。(注意:子序列可以不连续,子串要连续)例如:输入: [10,9,2,5,3,7,101,18]输出: 4解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。解题思路动态规划。动态规划主要就是要找准状态和状态转移。本题的状态显然可以是上升子序列的最大长度。状态转移就是:首先定位到我所要求的dp[i]位置上,在i之前比较(即j<i) 如果nums[i]>nums[原创 2020-08-20 22:36:27 · 110 阅读 · 0 评论 -
211. 添加与搜索单词 - 数据结构设计(leetcode)
添加与搜索单词题目描述解题思路代码题目描述题目链接:211. 添加与搜索单词 - 数据结构设计(leetcode)设计一个支持以下两种操作的数据结构:void addWord(word)bool search(word)search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。解题思路主要是利用字典树。字典树的基本学习可以做这道题:208. 实现 Trie (前缀树)。理解了基本字典树的思想后再做这道题其实就是关于通配符的处原创 2020-08-13 19:51:34 · 133 阅读 · 0 评论 -
235. 二叉搜索树的最近公共祖先(leetcode)
二叉搜索树的最近公共祖先题目描述解题思路代码题目描述题目链接:二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”例:1:输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节点 2 和节点 8 的最近公共原创 2020-08-08 16:40:01 · 106 阅读 · 0 评论 -
116、117填充每个节点的下一个右侧节点指针I、II(leetcode)
填充每个节点的下一个右侧节点指针题目描述解题思路完美二叉树二叉树代码完美二叉树二叉树题目描述题目链接:116 117116和117题目类似,都是要填充每个结点的 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。(初始状态下,所有 next 指针都被设置为 NULL。)例:所不同的是116为完美二叉树,而117为普通二叉树。解题思路刚看题目描述,肯定是不太清楚是什么意思。其实就是二叉树的每个结点定义时就有一个next指针,我原创 2020-08-05 12:49:58 · 123 阅读 · 0 评论 -
二叉树遍历(非递归解法)一个模板解决三种遍历
二叉树遍历(非递归解法)用同一个模板解决三种递归。附理解和代码原创 2020-08-02 19:22:12 · 203 阅读 · 0 评论 -
二叉树遍历(递归解法)
二叉树遍历(递归解法)思想加代码原创 2020-08-02 13:53:33 · 189 阅读 · 1 评论 -
387. 字符串中的第一个唯一字符(leetcode)
字符串中的第一个唯一字符题目描述解题思路代码题目描述给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。s = “leetcode”返回 0s = “loveleetcode”返回 2解题思路只需判断字符串的最前面的位置和最后面的位置是否相等即可,是,则返回位置,不是,则继续遍历,遍历结束仍没有找到则返回-1。运用find和rfind函数,分别从前往后和从后往前查找。代码class Solution {public: int firstU原创 2020-07-30 11:35:24 · 85 阅读 · 0 评论 -
206. 反转链表(leetcode)
反转链表题目描述解题思路代码题目描述题目链接:反转链表主要题目就是反转链表:例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL解题思路用的是迭代法。这个的一个特点就是往链表头部添加元素,天然具有倒序的特点。所以按照输入顺序直接添加元素,那么输出就是倒序。代码思路就是:先保存next结点。如果先执行的话,就会丢失next结点修改next,指向新链表修改pre为已添加的结点原创 2020-07-27 19:27:00 · 79 阅读 · 0 评论 -
198. 打家劫舍(leetcode)
打家劫舍题目描述解题思路代码题目描述题目链接:198. 打家劫舍(leetcode)主要就是求数组和的最大值,要求每个数组的值不能相邻。示例 :输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1 + 3 = 4 。解题思路动态规划。分析这个问题可由两部分组成,偷前k-1间房子,最后一间不偷;偷前k-2间房子和最后一间。因此,状态转移方程为:还要注意:在写递推关系的时候,要注意写上 k=0和原创 2020-07-22 17:00:12 · 67 阅读 · 0 评论 -
滑雪(信息学奥赛一本通—1280:【例9.24】)
滑雪题目描述用到的知识代码题目描述题目链接:1280:【例9.24】滑雪小明喜欢滑雪,因为滑雪的确很刺激,可是为了获得速度,滑的区域必须向下倾斜,当小明滑到坡底,不得不再次走上坡或等着直升机来载他,小明想知道在一个区域中最长的滑坡。滑坡的长度由滑过点的个数来计算,区域由一个二维数组给出,数组的每个数字代表点的高度。下面是一个例子:其实本题就是求这个数字矩阵一个走向的最大长度,走的要求是每次可以上下左右任意方向,但是下一个数必须比当前的数要小,最后输出这个长度。【输入样例】5 51 2 3 4原创 2020-07-20 16:50:03 · 725 阅读 · 0 评论 -
119. 杨辉三角 II(leetcode)
杨辉三角 II题目描述解题思路代码题目描述题目链接: 杨辉三角 II给定一个非负索引 k,其中 k ≤ 33,返回杨辉三角的第 k 行。示例:输入: 3输出: [1,3,3,1]解题思路运用了动态规划思想。总的来说就是利用杨辉三角形后一行与前一行的关系。更新过程为:从倒数第二个元素开始往前更新。它等于原来这个位置的数 + 前一个位置的数行[i] = 行[i] + 行[i-1]代码class Solution {public: vector<int> getR原创 2020-07-15 16:52:03 · 59 阅读 · 0 评论 -
102. 二叉树的层序遍历 107.二叉树的层次遍历 II(leetcode)
102.给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。示例:二叉树:[3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [9,20], [15,7]]107.给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)例如:给定二叉树 [3,9,20,null,null,15原创 2020-07-12 18:15:01 · 131 阅读 · 0 评论 -
数列操作(信息学奥赛一本通—1535)利用树状数组
数列操作题目描述代码题目描述题目链接:1535:数列操作给定n个数列,规定有两种操作,一是修改某个元素,二是求子数列[a,b]的连续和。数列元素个数最多10万个,询问操作最多10万次。刚开始看这道题觉得挺好写的,一顿操作猛如虎,循环套循环之后果然超时了…看了网上的解法主要用了树状数组,学习了之后直接套用就可以解决了。树状数组入门(超详细)。建议先搞清楚思想之后再来搞代码。代码#include<bits/stdc++.h>using namespace std;#define m原创 2020-07-10 18:28:06 · 435 阅读 · 0 评论 -
53. 最大子序和(leetcode) 动态规划、贪心解法、分治解法
最大子序和题目描述解法动态规划贪心分治题目描述题目链接:53. 最大子序和(leetcode) 给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4],输出: 6解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。解法这道题解法较多。暴力法就是将所有可能的连续数组的和都求出来,然后取最大值,研究意义不大,所以就不详细写暴力了。主要研究了一下动态规划、贪心、分治。动态规划原创 2020-07-08 14:55:57 · 160 阅读 · 0 评论 -
图书管理(信息学奥赛一本通—1456)利用set容器解答
例题原创 2020-07-05 12:02:17 · 528 阅读 · 0 评论 -
愤怒的牛(信息学奥赛一本通-T1433)详细解答
题目描述农夫 John 建造了一座很长的畜栏,它包括N(2≤N≤100,000)N(2≤N≤100,000)个隔间,这些小隔间依次编号为x1,…,xN(0≤xi≤1,000,000,000)x1,…,xN(0≤xi≤1,000,000,000). 但是,John的C(2≤C≤N)C(2≤C≤N)头牛们并不喜欢这种布局,而且几头牛放在一个隔间里,他们就要发生争斗。为了不让牛互相伤害。John决定自己给牛分配隔间,使任意两头牛之间的最小距离尽可能的大,那么,这个最大的最小距离是什么呢?输入第一行:空格分隔原创 2020-07-02 20:15:19 · 1040 阅读 · 0 评论 -
快速排序
快排的思想:快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想:1、从数列中取出一个数作为基准数,一般取数列的第一位2、将数组进行划分(partition),使基准左边不大于基准,基准右边不小于基准3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。...原创 2019-12-10 19:18:46 · 71 阅读 · 0 评论 -
03:基因相关性
做基因相关性这道题时,遇到了输入字符串,我选择的是gets(),但是出现了无法按照题目要求输出。这篇文章就是记录这个的原因原创 2019-10-27 20:03:17 · 782 阅读 · 0 评论