- 博客(132)
- 收藏
- 关注
原创 存个代码过后补
https://ac.nowcoder.com/acm/contest/11218/D#include<bits/stdc++.h>using namespace std;typedef long long ll;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n; ll k;cin >> n >> k;vector a(n);for(int i = 0; i < n;
2021-12-04 21:28:11
139
原创 力扣教你学炒股系列 共7题
121.买卖股票的最佳时机 (简单)题意:给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。思路:相当于只买卖一次股票,那我们只需要找数组中两个数的最大差值即可,但是要注意这个最大差值只能是被减数在减数的右边,所以我们边维护一个最小值 边计算差值即可。
2021-11-20 16:00:58
173
原创 Leetcode 84. 柱状图中最大的矩形(困难)
题意:给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。求在该柱状图中,能够勾勒出来的矩形的最大面积。思路:我们对于每个柱子都构造一个专属于他的最大矩形我们从左往右观察,对于当前柱子能与他右边各柱子构成的最大矩形是什么情况呢?是找到他右边第一个比他矮的柱子的左侧,这样专属于当前柱子的最大矩形的面积是长度*当前柱子的高度。那么这个问题就转化为 找到数组中 对于每个元素 其右侧第一个比他小的元素的下标-1这是单调栈的入门题目 剩下的不再赘述。public
2021-11-17 17:28:52
171
原创 Leetcode407. 接雨水 II(困难)
题意:给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。思路:跟接雨水Ⅰ里短板原理一样,对于每个点能接水的体积,现在取决于他四周接完水之后的高度了,即当前位置能接水的体积等于相邻四周最低的那个,我们维护一个最小堆,每次从堆里取出接水后高度最低的那个来,用它来更新他四周接完水后的高度即可public int trapRainWater(int[][] heightMap) { int n=heightMap.leng
2021-11-15 13:40:04
178
原创 Leetcode42. 接雨水 (困难)
题意:给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。思路:我们把每个下标对应的位置当成独立的个体来看,对于当前位置能接水的体积,根据短板原理,是由左右两边最矮的那个来决定的,因此对于每个位置能接水的体积,是他左边最高的柱子与右边最高的柱子两者取小。但是两层循环是超时的,我们可以预处理,提前处理出左右两边到当前位置的最大值。public int trap(int[] height) { int maxn=30005;
2021-11-15 13:25:26
189
原创 Leetcode 995. K 连续位的最小翻转次数(困难)
题意:在仅包含 0 和 1 的数组 A 中,一次 K 位翻转包括选择一个长度为 K 的(连续)子数组,同时将子数组中的每个 0 更改为 1,而每个 1 更改为 0。返回所需的 K 位翻转的最小次数,以便数组没有值为 0 的元素。如果不可能,返回 -1。思路:贪心思想,我们从左往右遍历数组,如果当前位置是0则翻转从这个位置开始长度为k的子数组,这样后来的翻转就不会影响前边已经翻转好了的元素,但是如果我们真正翻转的话,会超时,所以我们借助滑动窗口,用队列来模拟滑动窗口,队列中记录翻转的起始下标,对于后来
2021-11-15 12:04:48
408
原创 leetcode 33. 搜索旋转排序数组(中等)
题意:假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回 -1 。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是 O(log n) 级别。思路:题目要求是实现logn级别的,而且是旋转过后的排序数组,我们自然而然想到二分区间,对于每次二分区间,左右两个区间必定有一个是有序的,我们去有序的区间里判断target是否在
2021-11-14 09:44:21
77
原创 Leetcode15. 三数之和 (中等)
题意:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。思路:O(N3)和O(N2logN)的这里就不多说了一开始没打算整理,题解排序+双指针的之前看了一遍了,结果今天review的时候又想不清楚了,所以决定写个自己题解巩固一下首先我们排序,然后接下来遍历数组中的每一个数,对于某个位置i上的数,我们设立双指针,左边L指向i+1,右指针指向n-1
2021-11-04 20:48:17
70
原创 Leetcode 983. 最低票价(中等)
题意:在一个火车旅行很受欢迎的国度,你提前一年计划了一些火车旅行。在接下来的一年里,你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式:一张为期一天的通行证售价为 costs[0] 美元;一张为期七天的通行证售价为 costs[1] 美元;一张为期三十天的通行证售价为 costs[2] 美元。通行证允许数天无限制的旅行。 例如,如果我们在第 2 天获得一张为期 7 天的通行证,那么我们可以连着旅行 7 天:第 2 天、第 3 天、
2021-10-07 15:04:56
119
原创 Leetcode 630. 课程表 III(困难)
题意:这里有 n 门不同的在线课程,他们按从 1 到 n 编号。每一门课程有一定的持续上课时间(课程时间)t 以及关闭时间第 d 天。一门课要持续学习 t 天直到第 d 天时要完成,你将会从第 1 天开始。给出 n 个在线课程用 (t, d) 对表示。你的任务是找出最多可以修几门课。思路:首先我们注意到,每门课程在结束时间前的任意时间都是可以学习的。所以我们想到:在某一个结束时间节点前,对于相同数量的课,当然要所耗费的时间越少越好,这样后面有新课时才有可能装得下。贪心思想首先我们将每门课按结束
2021-10-06 13:05:05
132
原创 Leetcode 600. 不含连续1的非负整数(困难)
题意:给定一个正整数 n,找出小于或等于 n 的非负整数中,其二进制表示不包含 连续的1 的个数。思路:一开始先写了一下dfs+剪枝,勉强可以通过,但是耗时上只打败了7%所以下面只写dp思路先把官方的图贴过来我们以高度为2的一层中的两个0来举例,即它们的高度相同,节点的值也相同,均为1,并且以它们为根结点的两棵子树都是满二叉树,那么它们包含的无连续 1 的从根结点到叶结点的路径个数是相同的。此外,在高度为 t、根结点为 0 的满二叉树中:其左孩子是高度为 t−1、根结点为 0 的满二叉树。
2021-10-03 16:26:34
152
原创 Leetcode 1151:最少交换次数来组合所有的 1 (中等)
会员题目 mark一下题意:给出一个二进制数组 data,你需要通过交换位置,将数组中 任何位置 上的 1 组合到一起,并返回所有可能中所需 最少的交换次数。思路:首先扫描整体数组统计1的个数,记为n,然后从头开始扫描大小为n的滑动窗口内1的个数,记为cnt,那么将不在窗口内的1全部聚集到当前滑动窗口的代价为n-cnt,统计每个窗口的n-cnt取最小值即为答案int minSwaps(int []data){ int n=0; if(data.length==0){
2021-09-27 09:10:54
753
原创 弃子@Autowired;新生儿:final + 构造函数
在一般的开发模式中,我们基本是这样的:Controller层注入Service层,Service层注入Dao层,通过@Autowired来自动注入,而且这种方法用起来也很爽,也用了这么多年了Springboot官方建议使用final来修饰成员变量,然后通过构造方法来进行注入 private final QdTdhlTools qdTdhlTools; private final BaseChatMessageService baseChatMessageService; publi
2021-04-14 16:20:31
1408
1
原创 MyBatis中 @Param注解的使用,加与不加
在使用mybatis时经常碰到这些错误:org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'code' in 'class java.lang.String'; (应该是多个参数的情况下会出现) nested exception is org.apache.ibatis.binding.BindingException: Parameter 'code' not found. Av
2021-03-07 23:11:11
1810
1
原创 溢出OF和进/借位CF标志位的判定
CF是无符号数溢出标志,OF是有符号数溢出标志。通俗一点说就是,即使有符号数相加/相减导致了CF=1也没什么意义,不能说明结果的正确与否。此时,OF=1,则说明结果溢出,出现错误;OF=0,说明结果正确。这个过程根本和CF没关系,CF=1/0,都不会影响。同理也可以得出OF对无符号数也无影响。方法一:根据表达式OF=Cn异或Cn-1Cn表示第n位的进位CF=Cout异或CinCin等价于Sub的选择控制,为1时表示做减法加法时,CF为1表示有进位;减法时,CF取反为1表示有借位方法二:人
2020-12-19 12:16:23
17405
2
原创 POJ 3273 二分
题意:给定一个序列,划分成m个子串,求一个数x使得每个子串的和都小于x思路:二分,l是整个序列中的最大值,r是子列和,看看能不能划分成m个;判断是否能划分成m个:从头开始,累加 知道和大于当前mid,组数+1并且从当前位置继续累加。 最后如果组数大于m则表示不能划分 应把界限变大。import java.util.Scanner;public class Main { final s...
2020-01-31 19:10:49
103
原创 java进制转换函数
过完年了,康复训练开始吧!除了手写进制转换外,来点方便的进制转换函数public class Main { public static void main(String[] args) { int n = 18; Integer.toHexString(n); System.out.println(n + "的二进制是:" + Integer.toBinaryString(n))...
2020-01-29 20:32:06
380
1
原创 LeetCode.525 连续数组(中等)
题意:给定一个二进制数组, 找到含有相同数量的 0 和 1 的最长连续子数组(的长度)。思路:从头开始遍历,维护一个map记录1与0的数量差,到当前时,如果曾经出现过一样的数量差,说明当前pos到之前pos这段数量相等class Solution {public: int findMaxLength(vector<int>& nums) { int...
2019-12-29 14:06:50
2275
原创 1098 Insertion or Heap Sort (25 分) 1089 Insert or Merge (25 分)各种排序特点整理总结
其实归并排序和插入排序为了做题简单可以直接用sort函数代替。插入排序的特点是:b数组前面的顺序是从小到大的,后面的顺序不一定,但是一定和原序列的后面的顺序相同~所以只要遍历一下前面几位,遇到不是从小到大的时候,开始看b和a是不是对应位置的值相等,相等就说明是插入排序,否则就是堆排序啦~插入排序的下一步就是把第一个不符合从小到大的顺序的那个元素插入到前面已排序的里面的合适的位置,那么只要对前几...
2019-11-30 17:10:29
118
原创 1143 Lowest Common Ancestor (30 分)链表里跑LCA
朴素做法:给定了先序 先序排个序得到中序 然后建树 然后LCA就行了LCA可以有两种:一种是当普通二叉树来跑,另一种就是在BST里跑普通二叉树LCA:Tree lca(Tree tree,int a,int b){ if(!tree||tree->data==a||tree->data==b) return tree; Tree l=lca(tree->le...
2019-11-22 16:39:11
109
原创 判断是不是完全二叉树的几种方法
我一开始的错误方法(修正后可用):层序遍历把遍历到的第i点赋值idx ,都赋值了以后再次层序遍历看看某个点的左右孩子节点除以二是不是等于他的idx但是 有一个反例:一共两个点,根节点1 1无左孩子 有右孩子2 满足上面方法但是不是完全二叉树所以在判断的时候需要区分一下左右孩子 左孩子/2,右孩子减1再除以二方法二:层序遍历的时候给每个节点的左右儿子标上号(当前 * 2,当前 * ...
2019-11-22 14:24:04
698
原创 1021 Deepest Root (25 分)树的直径变形
题意:问给定的图是不是树选定不同的为树根时 树的高度是不同的,求树的高度最大时的树根(不唯一就升序输出)思路:先并查集判连通域 ,不是树就Error是树:一开始傻了 以为只要度为1的点 就一定是满足题意的点结果不是:如图那就考虑树的直径做法任选一点开始DFS,把最大高度的点放入集合A(因为可能不唯一)然后从A中任选一个点继续DFS,把最大高度点放入B然后A+B去重排序输出!...
2019-11-21 17:38:06
113
1
原创 1049 Counting Ones (30 分)思维
想麻烦了,想递归做来着 后来感觉很麻烦 就学了下大佬们的简单做法思路:考虑每一位的贡献对于当前的一个位now他的贡献肯定是由她左边的数left+右边的数right决定考虑now的值如果now为0,那么他是1的情况 只能由左边从0到left-1得来,同时右边的数有p种变化,一会再说p是啥所以这一位的贡献就是left * p如果now的值为1,在0的基础上 还增加了now为1时 右边的...
2019-11-19 16:15:37
83
原创 1119 Pre- and Post-order Traversals (30 分) %%%%%%%%%
这个题把我这菜鸡治的服服帖帖!题意:给定先序和后序问中序是否唯一并输出其中任意一个中序序列思路:首先知道为啥没有中序序列不能为以确定一颗树的原因:对于先序序列,某个根节点右边都是(这个都是并不完全是从他到结尾的意思)他的孩子节点,我们选定他紧挨着右边的这个点,那这个点肯定就是他某个子树(不确定左右)的根节点root2,root2右边的所有点(所有定义同理)我们称为集合S1,然后再去看这个...
2019-11-18 21:13:32
127
原创 先序+中序 中序+后序得到树的确定形状
int pre[maxn],in[maxn];Tree build(int len,int pre[],int in[]){ if(len==0) return NULL; Tree temp=new node; temp->data=pre[0]; int i; for(i=0;i<len;i++) if(in[i]==pre[0]) break; te...
2019-11-17 15:26:20
125
原创 1099 Build A Binary Search Tree (30 分) 只得22分的原因
自己想了个比较麻烦的做法:先用队列存下输入的各节点关系然后建图 过程:每次从队列pop两个点作为当前的点的子节点 如果子节点有不为空的则继续递归建立但是这样就用不到人家给的序号了 只需要考虑-1和非-1;这个时候题目题意输入也没说清楚其实应该加上一句第i个输入代表第i个节点的子节点建图完成, 开始填数判断当前点左边有几个点 右边有几个点 递归建立。最后层序输出100行 22分 ...
2019-11-17 13:39:53
90
原创 1103 Integer Factorization (30 分)dfs+剪枝
没啥好说的感觉自己剪枝已经到极限了可还是T后来想了想,我的垃圾思路是每次都得从头到尾遍历一遍正解是从最大开始判断当前数字放还是不放,所以不用从头到尾遍历 也不用判断sum一样时候字典序大小T了的垃圾代码:#include<iostream>#include<algorithm>#include<string.h>#include<map&g...
2019-11-15 12:18:11
133
原创 1068 Find More Coins (30 分) 01背包求字典序最小路径
题意:用n个硬币买价值为m的东西,输出使用方案,使得正好几个硬币加起来价值为m。求字典序最小方案思路:一开始看着m只有100,暴搜结果T了一个1分的测试点。然后dp记节点+dfs跑字典序最小路径 结果T了个4分的测试点…太菜了啊 最后这题还是看了题解解释看注释#include<iostream>#include<algorithm>#include<st...
2019-11-12 21:12:11
148
原创 C++ 优先队列存放自定义类型的指针时自定义优先级失效的解决方法
当 C++ 的 std::priority_queue 存放的是自定义类型的指针时,我们自定义的优先级比较方法,比如在自定义类型内部重载 < 运算符等方式,优先队列的优先级将会发生错误。解决方法是使用 Compare 代替#include <queue>/* 自定义类型 */class Node{public: int value; int prior...
2019-11-12 19:06:46
1503
2
原创 1038 Recover the Smallest Number (30 分) 巧做字符串排序
我哭了我真的菜哭了写了两个小时最后还差一个2分的测试点死活debug不出来网上一搜题解发现别人二三十行解决思路虽然一样但是做法千差万别我跟个憨憨一样慢慢模拟菜鸡的28分垃圾代码#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#includ...
2019-11-09 10:56:58
113
原创 c++ string常用函数
string 类有一些查找子串和字符的成员函数,它们的返回值都是子串或字符在 string 对象字符串中的位置(即下标)。如果查不到,则返回 string::npos。string: :npos 是在 string 类中定义的一个静态常量。这些函数如下:find:从前往后查找子串或字符出现的位置。rfind:从后往前查找子串或字符出现的位置。find_first_of:从前往后查找何处出现另...
2019-10-15 15:06:09
173
原创 回文树模板整理
有的算法只会模板题真不行,有的算法没有理解深刻照样不会做题,今天又看了一遍回文树,加深了一下理解,顺便整理一下模板超好理解#include<iostream>#include<algorithm>#include<cstdio>#include<cstring>using namespace std;const int MAXN = 1...
2019-10-14 19:32:33
181
原创 图论板子搞搞
参考博客:本校潘武杰大佬本校秦狗求欧拉回路#include<cstdio>const int N=101108,M=201108;struct Side{ int v,ne,ok,id;}S[M<<1];int t,n,m,sn,cnt,head[N],cur[N],in[N],out[N],fa[N],ans[M<<1];void i...
2019-10-13 11:19:41
162
原创 POJ - 2774 Long Long Message 用后缀数组求两个串的最长公共子串
思路:把两个串中间加一个分隔符 然后连接起来 对新串求height数组然后看看height数组对应的两个串的起始位置(SA数组) 是不是分别在分隔符两端 即可#include<iostream>#include<string>#include<algorithm>#include<cstdio>#include<cstring&g...
2019-10-07 10:55:01
96
原创 POJ - 1743 Musical Theme 后缀数组+二分
题意:有N(1<=N<=20000)个音符的序列来表示一首乐曲,每个音符都是1…88范围内的整数,现在要找一个重复的子串,它需要满足如下条件:1.长度至少为5个音符。 2.在乐曲中重复出现(就是出现过至少两次)。(可能经过转调,“转调”的意思是主题序列中每个音符都被加上或减去了同一个整数值) 3.重复出现的同一主题不能有公共部分。思路:首先把问题转化成重复子串的问题:把原串每一位都...
2019-10-06 17:17:59
109
原创 Prefixes and Suffixes CodeForces - 432D KMP
题意:给你一个长度为n的长字符串,“完美子串”既是它的前缀也是它的后缀,求“完美子串”的个数且统计这些子串的在长字符串中出现的次数思路:找出完美子串个数不用说 next数组的本质问题在于统计每个完美子串的出现次数我们从后往前统计,对于每个位置i 对应的子串0~i 记作S1吧,考虑他的next[i]的前缀 即 0 ~next[i],记作S2吧如果S1出现一次,那么S2肯定会出现所以我...
2019-10-06 14:18:06
111
原创 POJ - 1451 T9 字典树好题
题意:原来的按键手机都一般是九键,九键输入英文很麻烦,例如要键入“hello”,必须按两次键4、两次键3、三次键5、三次键5,最后按三次键6。现有一种新的输入方案名叫“T9”,只需要不重复地按键,软件就会使用内置的字典来查找最可能的与输入匹配的单词。例如,输入“hello”,只要依次按下4,3,5,5,6各一次即可。当然,这也可能是“gdjjm”一词的输入,但是因为这不是一个合理的英语单词,所...
2019-10-05 10:43:58
201
原创 二分图模板整理
染色法#include<iostream>#include<algorithm>#include<string.h>#include<map>#include<queue>#include<cmath>#include<cstdio>#include<stack>#define ll ...
2019-10-04 15:56:04
143
原创 CodeForces - 165C Another Problem on Strings 前缀和+二分
题意:给定一个01串和k,求包含k个1的子串的个数思路:用前缀和记录到当前位置的个数,那么就可以知道某个子串的1的个数我们遍历字符串对于每个位置i,以他为开头的子串,要求1的个数为k的数量,我们只需要求有多少个值等于sum[i-1]+k就可以了,枚举肯定不行,因为是前缀和有序,我们二分,两次二分upper_bound(sum+1,sum+len+1+1,sum[i-1]+k)-low...
2019-10-04 10:30:40
181
原创 Hard problem CodeForces - 706C 字符串 dp
题意:给定n个字符串,让你求排成字典序的花费,这里不能交换任意两个字符串的位置,只能通过将两个字符串翻转来排序,每个字符串i的翻转代价是cost[i]这题和字符串没大有关系,就是个简单dp思路:考虑四种情况来转移就可以了,代码很清晰#include<iostream>#include<algorithm>#include<string.h>#in...
2019-10-03 20:01:10
123
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人