自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 收藏
  • 关注

原创 C++中为什么不能把所有函数都设置成虚函数?

在面试的时候被问到一个问题,既然虚函数可以不被重写,为什么不把所有的函数都设置成虚函数?我当时的回答是,因为对于工程来说,一个类里可能会有很多的函数,都设置成虚函数的话会有很多不必要的开销(虚函数表)。但总觉得回答不够完善,所以闲下来去了解了一下这个问题:1.有些函数不能设置成虚函数,如:构造函数、内联成员函数、静态成员函数、友元函数、普通函数(非成员函数),他们各有其原因:1)构造函数:不能被继承;构造函数时,函数还没实例化,无法通过虚函数表指针寻找虚函数;2)内联成员函数:内联要求在编译时展开该

2021-05-29 17:47:03 1126 1

原创 关于博主

其实写了一百来篇博客,可以很自信地说没有水过,虽然废话比较多x自我介绍也一直没写,想想这个博客记录了那么多原来做的题,也有一些人看,或许写个自我介绍,以后再更新更新,会有种特别的感觉。这个博客是从高二开始写的,我是从高一开始接触NOIP,但第一年水过去了,高二被某校坑了一把,退役了。高中前两年搞NOIP+FTC,高三准备高考,然后读大学继续搞ACM。不过我现在更新的显然不是ACM题了,因为卑微大三生要刷剑指offer找工作了呜呜呜。成七OIer 省二退役,FTCer 世锦赛退役UESTC ACMe

2021-04-20 20:19:47 125

原创 借【剑指 Offer 53】写写upper_bound,lower_bound与手写二分

剑指 Offer 53 - I. 在排序数组中查找数字 I统计一个数字在排序数组中出现的次数。剑指 Offer 53 - II. 0~n-1中缺失的数字一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。之前面试有被问到过upper_bound和lower_bound,当时很久没接触,记得不太清楚了,这次写到这里刚好梳理一下;upper_bound 和lower_bound是C

2021-09-27 19:02:30 261

原创 剑指 Offer 58 - I. 翻转单词顺序 II. 左旋转字符串 C++ 不另外开辟空间做法

剑指 Offer 58 - I. 翻转单词顺序输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。剑指 Offer 58 - II. 左旋转字符串字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。为什么要写

2021-09-27 17:43:54 156

原创 剑指 Offer 64. 求1+2+…+n C++ 两种做法

题面:求 1+2+…+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。这道题完全不知道想考啥,所以一开始写了个乱搞算法(其实是借鉴了计算机算乘法的方法)class Solution {public: unsigned int build(int u) { unsigned int ret=u; ret|=ret<<1; ret|=ret<<2;

2021-09-14 15:00:49 218

原创 一些刷lc过程中遇到的易错点总结

因为刷lc的过程中偶尔会遇到一些容易写错的地方,有的还有些难debug。但是对每道题都写一个文章的话,写文章的时间比写题要多很多,所以就总结到这个文档里,防止忘记,也可以给别的同学做一个参考。1.while(res&1==0) ==》》while((res&1)==0)提醒自己,不管怎么样位运算都一定要记得套括号啊!...

2021-09-08 13:58:13 310

原创 2021-06-24 可能只有我不知道的工程小技巧【长期施工中】

sindar开始了实习之路,第一步就是配环境。但是sindar又不会java又不会工程还不会mac,所以会遇到很多别人看来很简单的问题。这篇文章就是存档这些只有“不会java不会工程不会mac”的人才有可能不知道的问题;1.xml可以用vim打开,但Mac的vim不好找,此时可以用命令行来实现使用vim编辑文件。...

2021-06-24 10:33:04 79

原创 如何在高并发时防止服务器崩溃

和上一篇文章一样,这个问题也是我在面试中遇到、觉得自己考虑不完全的问题,我没有多线程编程经验(也没有工程经验),对这些问题一知半解,所以看了网上的一些博客,感觉太长的篇幅以后看起来会比较慢,就从中选择了部分我能理解的办法做一个存档。主要参考:https://www.cnblogs.com/hiit/p/11083840.html1.增加服务器、提高硬件能力;2.使用缓存;3.分布式开发;4.使用镜像;5.图片服务器分离;6.优化代码;...

2021-05-30 10:14:33 716

原创 常见排序算法整理&C++代码(n^2部分:冒泡,选择,插入)

高一学的排序算法,在大三可以说是忘记得只剩下一小半了,所以决定复习一下。全文是学习leetbook《排序算法全解析》做的笔记,所以框架结构会按照这本书来,该书链接如下:https://leetcode-cn.com/leetbook/detail/sort-algorithms/O(n2)O(n^2)O(n2)1.冒泡排序:...

2021-05-19 09:33:30 122 1

原创 每天一个神奇小技巧

本文用于收录sindar在学习时遇到的不好归类又因太简单而难以成文的神奇小技巧,不定时更新1.swap虽然c++提供了swap函数,但有的语言却需要自己写swap,这时常见的做法便是使用一个中间量。void swap(int &a,int&b){ int tmp=a; a=b; b=tmp;}但是如果要节约空间,那就要考虑别的做法,比如使用加/减法。void swap(int &a,int &b){ a=a+b;//a:a+b

2021-05-18 11:27:08 77

原创 leetcode刷题记录&题解&c++代码 剑指 Offer 13. 机器人的运动范围

剑指 Offer 13. 机器人的运动范围题目:地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子数据范围:1 ≤\leq≤n,m ≤\leq≤ 1

2021-05-03 21:04:22 135

原创 leetcode刷题记录&题解&c++代码 剑指 Offer 12. 矩阵中的路径

剑指 Offer 12. 矩阵中的路径题目:给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。数据范围:1 ≤\leq≤ board.length ≤\leq≤ 2001 ≤\leq≤board[i].length ≤\leq≤ 200board 和 w

2021-05-03 20:51:20 168

原创 leetcode刷题记录&题解&c++代码 剑指 Offer 43. 1~n 整数中 1 出现的次数

剑指 Offer 43. 1~n 整数中 1 出现的次数输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。思路:这个题是属于特别让人讨厌的题233,有几种思路,分0-9,10-99,100-999来做,或者按位来做,我是按位来做的,我个人认为这样会好做很多。然后对每一位进行分析,发现他们有一个很简单的规律来描述其出现次数,可以画图会比较容易看出来,其实就是每个数字在前一个数取最大时要单独考虑,

2021-05-03 20:25:15 106

原创 leetcode刷题记录&题解&c++代码 每日一题 21.5.3 7. 整数反转

整数反转给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。如果反转后整数超过 32 位的有符号整数的范围 [−2312^{31}231, 2312^{31}231 − 1] ,就返回 0。假设环境不允许存储 64 位整数(有符号或无符号)。思路:如果输入一个2e9+9,结果显然会爆int,但是题目要求不允许使用64位,所以不能用longlong(有题解使用long,其实是钻了不同环境long长度不同的空子,若long为32位,则还是会爆,若long为64位(也就是l.

2021-05-03 20:00:44 116

原创 leetcode刷题记录&题解&c++代码 每日一题 21.4.28 633. 平方数之和

平方数之和给定一个非负整数 c ,你要判断是否存在两个整数 a 和 b,使得 a2a^2a2 + b2b^2b2 = c 。数据范围:0 ≤\leq≤ c ≤\leq≤ 2312^{31}231 - 1思路:枚举i,边界为i*i ≤\leq≤ c,直接判断剩下是否可以被补足,时间复杂度O(c)O(\sqrt c)O(c​) 0ms(100%) 5.8M(67%)也可以双指针,可以少sqrt的常数,不过由于本来就是0ms,所以反而空间多用了… 0ms(100%) 5.9M(25%)我看还有用数.

2021-04-28 09:33:27 108

原创 leetcode刷题记录&题解&c++代码 每日一题 21.4.27 938. 二叉搜索树的范围和

二叉搜索树的范围和给定二叉搜索树的根结点 root,返回值位于范围 [low, high] 之间的所有结点的值的和。题意:如题,已经很简洁了思路:其实直接dfs一次都可以,但是可以根据二叉搜索树的特征做剪枝,不访问不满足条件的点。wa了一发,写dfs边界的时候忘记lef,rig本身的约束了/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *.

2021-04-27 10:28:46 89

原创 leetcode刷题记录&题解&c++代码 每日一题 21.4.26 1011 在 D 天内送达包裹的能力

在 D 天内送达包裹的能力传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。数据范围:1 ≤\leq≤ D ≤\leq≤ weights.length ≤\leq≤ 500001 ≤\leq≤ weights[i] ≤\leq≤ 500题意:选定最小m,使得传送天数≤D\le.

2021-04-26 17:52:24 126

原创 leetcode刷题记录&题解&c++代码 剑指offer11 遍历做法和二分做法

剑指 Offer 11. 旋转数组的最小数字题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。题意:输入一个分两段递增的数组,找里面最小的一个数;思路:1.遍历一次记录最小8ms(56%) 11.9M(18%)看到还有找第一个比前一个小的(但因为题意没说能否只搬0个数字到末尾,所以我没写)2.二分查找,利用分两段上升的特

2021-04-20 20:10:14 91

原创 leetcode刷题记录&题解&c++代码 剑指 Offer 10 I&II

剑指 Offer 10- I. 斐波那契数列题意:求斐波那契数列的f(n),n≤100n \leq 100n≤100思路:直接模拟class Solution { static const int modd=1e9+7;public: int fib(int n) { int f[100+5]={0,1}; for(int i=2;i<=n;i++) f[i]=(f[i-1]+f[i-2])%modd; r

2021-04-20 19:16:18 112

原创 leetcode刷题记录&题解&c++代码 剑指 Offer 09. 用两个栈实现队列

剑指 Offer 09. 用两个栈实现队列题意:如题目思路:纯模拟(懒惰如我,其实是用的数组x)364ms(45%) 101.9M(28%)class CQueue {int head,tail,num[10000+5];public: CQueue() { head=0;tail=0; } void appendTail(int value) { num[tail++]=value; } int del

2021-04-20 19:10:23 81

原创 leetcode刷题记录&题解&c++代码 07

剑指 Offer 07. 重建二叉树题意:使用二叉树的前序遍历和中序遍历构建二叉树;思路:根据两种排序的特点,得到构造方式(通过前序判断端点,根据中序和前序判断孩子节点)我写了两种写法,一次对中序中节点在前序的位置做了预处理,一次没有,时间差别比较大。不做预处理 236ms 24.9M(37%)/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left;

2021-04-20 19:05:50 84

原创 leetcode刷题记录&题解&c++代码 03-06

不知不觉就大三啦,前段时间开始系统地刷力扣为面试笔试做准备,看到有的易错地方和通过率比较低的题,觉得或许有同样在刷题的伙伴需要题解和代码,就决定捡起荒置的博客,对我刷过的题进行存档和整理,对我复盘应该也有一些帮助。这里是c++选手,代码可能会有一些竞赛风格,而且对速度和使用内存没有太大的强迫症。这篇文章会按照“剑指offer”的顺序排列刚开始写class简直是痛苦…不过收获也挺多的剑指 Offer 03. 数组中重复的数字题意:找出数组中任意一个重复的数字(数组中数据大小都在0~长度-1)数据范围

2021-04-08 21:04:13 129

原创 NOIP模拟题 [位运算][生成树]

如约而至。 愿不辜负。说正事,不要因为写得很快而沾沾自喜,对拍要快快快一点啊啊啊! 然后推的时候要用变量代替样例数据,同时一定!要自己出数据。 还有,一定要在思路理清楚以后认真检查一次程序的逻辑关系,是否能达到要求,尤其是常数的使用。 静态差错一!定!要!认真看每一句,清醒一点呀喂! 现在脑子不太好使,很容易想不出来,每抓住一个可能的思路,不要因为问题而退缩,要想一下如果我要用这个方法的话

2016-11-18 14:56:32 548

原创 NOIP模拟 [筛法][构造][扫描线]

好好好好好写暴力,不要因为觉得太简单了就乱写,最后少考虑了特殊情况。 现在是暴力会出这种错,以后写正解也少考虑情况就惨了。 LOGIC. 掌握时间复杂度的分析方法和常见算法的时间复杂度。T1: 题意: 求l-r里的素数数。 分析: 垃圾T1毁我青春。 先打根号以内的素数表,再筛一次,注意第二次筛要限制max(i*i,lef/i*i),这样才能够尽量减少无意义的更改,免得T1就T。#i

2016-11-17 15:30:05 766

原创 NOIP模拟题 [模拟][递推][平衡规划]

在写暴力的时候也不要放过发现的每一个题目特点,这可能就是正解的关键。T1: 题意: 求给定一个序列最大公约数为1的最长长度; 分析: 傻逼题,害我读了几次题。#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<algo

2016-11-16 20:17:13 1031 2

原创 高精度复习

有时间改个万进制(其实也就是读入麻烦了一点)#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<algorithm>#include<queue>#include<set>#include<map>#include<s

2016-11-16 07:38:04 514

原创 NOIP模拟题 [LIS][建图][递推][容斥]

正确评估题目难度。T1: 题意: 给定一棵树,求使得每一个节点的左子树任意值都比当前节点值小,右子树任意值都比当前节点大所需要的最小改动点数。 分析: 首先对于这种神奇的递归定义,我们通过传递大小关系可以发现,通过上推我们可以确定任意两点之间的大小关系,然后很容易想到把树上的点排序。 所以如果先忽略掉“严格递增”和“可能中间不能加数”,这道题显然可以直接贪心减去LIS。 那么这种算法会遇

2016-11-15 21:37:45 797 1

原创 NOIP模拟题 [递推][优化][dp][线段树][离散]

稳啊稳啊。对拍大法好。 不过最开始看题的时候要记住评估一下正解难度和暴力难度,T3明明可以搞60分的,可惜了。 还有就是,写程序之前一定要想清楚!处理好特殊情况,确保算法在实现过程中的正确性!对拍出错再来改代价太大!T1: 题意: 对一个给定字符串进行多次复制黏贴操作,求最后得到字符串的前n位,若字符串过长,只保留前m位。 分析: 看了下m的大小,觉得非常酸爽。 因为如果正向处理的话,

2016-11-14 16:59:58 882

原创 NOIP模拟题 [递推][DP][搜索]

T1: 题意: 要求将1-n的数排成两列,使得两列数的个数相等且都递增,还要求其中一列比另一列对应位置上的数大。 分析: 两个方法: 1.先写个暴力打表找规律,因为反正也要写对拍。 2.分析一下: 还涉及到除法取mod,求逆元,我用的费马小定理,还可以exgcd,线性递推。#include#include#include#include#include#includ

2016-11-13 22:00:13 743

原创 NOIP模拟题 [线段树][矩阵快速幂]

有一定难度,要深入挖掘问题特性。 T1: 题意: 给定一个序列,每次操作把操作位置及其后面比它小的数按顺序排列(整体上仍在原来的位置),求每次操作后的逆序对数。 分析: 每个数对逆序对数都有一个贡献(在它后面比它小的数,对一个数进行操作就是取消它及它后面的数的贡献(因为对一个数来说,它都被重排了,它后面比它更小的就更会被重排了。 所以可以知道,每个点被取消贡献的时间就是它前面且比它大的数

2016-11-11 21:22:22 602

原创 NOIP模拟题 [SPFA][DP][栈结构]

冷静。 我不想再集齐傻逼错了还是认真检查吧。T1: 题意: 在一个有的点不能走的图上求最少经过多少不能走的点能走到某一点或图的边界。 分析: 其实就是图上最短路,走个SPFA,因为更新很少所以不会T; 我下次再也不用dfs玄学大法乱搞图论了,再也不!#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>

2016-11-11 15:26:13 697

原创 NOIP模拟题 [模拟][DP][线段树]

抽象题目所求性质。 熟练模板。T1: 题意: 把一序列重复,求一区间内某字符出现次数。 分析: 显然把超出该区间长度的直接乘法算就行了,注意一下并区间,区间从1开始导致len取不到的问题处理。思路很简单,但可能会被包装在比较难的题里面。解锁新错误:读入优化没开longlong 不知道什么时候才能把这些傻逼错集齐。#include<iostream>#include<cstdio>#i

2016-11-10 20:37:06 1470

原创 NOIP模拟题[数论}[暴力][拆点]

沉迷T3,不能自拔。 T1: 题意:求2的n次方modp,p为质数; 分析: 如果n小,就是快速幂。 如果n大,又是质数,就是费马小定理先把nmod了再直接暴力算。 有人写高精度快速幂,过了70,辛苦了。#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#incl

2016-11-09 21:31:55 818

原创 NOIP模拟题 [DP][二分][树剖][树上差分]

认认真真地想…… T1: 题意:求三个字符串的LCS; 分析: 开三维,只在都相等的时候考虑加1,因为每个配对点都只顺序枚举一次,所以不会漏不会重。#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<string>#include<algorithm

2016-11-09 20:03:19 664

原创 NOIP模拟题 [构造][贪心][暴力]

从以往犯的错上汲取经验。 注意循环,if的嵌套以及break等地方。 训练暴力能力。 如果要修改一个地方一定注意看一下有没有忘了的东西!还有复制黏贴也是一样。T1: 题意: 给定一些字符串,可对字符串的长度为偶数的前缀进行反转操作,相同则消除,求最后剩下多少。 分析: 先考虑把后面的匹配,则只要把某两个看作一块,只要还有一个相同且没有被配对的块,就一定可以被翻到最前面且调换方向,然后翻

2016-11-08 17:04:54 929

原创 NOIP模拟题[dfs][DP]

深入思考,仔细读题,抽象化问题本质,寻找相同点。 DP的话,思考一种可以完美概括影响又没有多存无意义信息的表示。 所以要分析什么信息对后来的计算有用。T1: 题意: 判断一棵子树所有节点的编号是否刚好为一完整区间。 分析: 简单分析一下,可以一次dfs搞定,就上传最小节点编号,最大节点编号,然后比较一下子节点个数即可。#include<cstdio>#include<iostream>

2016-11-07 18:25:59 548

原创 NOIP模拟题[贪心][离散化][LIS]

思考深入再深入! 小心MLE(躺 T1: 题意: 有n个怪物,生命值分别是hi,你有M魔法值,魔法值可用来使某一怪物失去2点生命值或所有怪物失去1生命值。每一轮你可以选择是否用魔法值(若不用则使一怪物失1血),在你做出选择后,所有生命值严格大于一的怪物会分别使你失去1生命值,求怎样决策能使得你失去的生命值最少。 分析: 首先,肯定优先攻击生命值低的怪物,因为这样绝不会使你被攻击的次数增多

2016-11-06 22:01:11 983

原创 UVa10817 Headmaster's headache[状压DP]

最后再跟自己强调一次,Think twice,code once. Headmaster’s Headache The headmaster of Spring Field School is consider- ing employing some new teachers for certain subjects. There are a number of teach- ers

2016-11-03 11:42:32 560

原创 UVa1625 Color length[DP][差分]

Cars painted in different colors are moving in a row on the road as shown in Figure 1. The color of each car is represented by a single character and the distance of two adjacent cars is assumed to be

2016-11-02 20:05:05 374

原创 NOIP模拟题[贪心][DP][数论]

改程序之前,写程序之前,确保自己理解了,不然效率会很低。 写程序少用复制黏贴,容易细节出错,不好调试。 T1: 题意: 给定两字符串,判断B串是否是A串的字串且输出B串每个字母的匹配位置字典序最大的匹配方案。 分析: 典型贪心,特别是“字典序最大”,不过好久没写贪心了有点迟钝233. 从后向前遍历B串和A串,找到B串单词的第一个匹配位置即可比较下一个。#include<cstdio>

2016-11-02 17:28:07 706 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除