自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 资源 (1)
  • 收藏
  • 关注

原创 专栏目录

AlgoREADME00-前置知识复杂度分析Java快速入门01-基础算法递推&&递归二分分治模拟排序前缀和&&差分贪心02-数据结构03-简单数学04-字符串05-图论06-树上问题07-其他技巧08-脑洞问题...

2020-11-25 15:02:05 114

原创 352. 将数据流变为多个不相交区间

typedef long long ll; const int N = 1e5+100;const int mod = 1e9+7;int f[N],r[N];bool vis[N];set<int>st;vector<vector<int>>ans;int find(int k) { if (k == f[k]) return k; return f[k] = find(f[k]);}class SummaryRanges {.

2021-10-09 08:25:25 145

原创 639. 解码方法 II

typedef long long ll; const int N = 1e5+100;const int mod = 1e9+7;ll dp[N];class Solution {public: int numDecodings(string s) { memset(dp, 0, sizeof dp); dp[0] = 1; int len = s.length(); for (int i = 1; i <= len;

2021-09-27 08:29:39 157

原创 力扣 || 5856. 完成任务的最少工作时间段 || 状态压缩

链接地址两个数组,都是状压。 f , w.f 计算答案w 计算当前状态下所有的工作是不是可以在一个时间段里面完成。初始化首先把 w 中所有有效地状态计算出来。正式计算枚举所有状态,计算当前状态下的答案。代码中 (j-1) & i 可以枚举 i 这个状态下的所有子状态。。i 这个状态就可以由所有的子状态得到。切记: 要赋初值。const int N = 2e5+10;int f[N],w[N];class Solution {public: int minSess

2021-08-29 16:41:20 226

原创 力扣每日一题 || 295. 数据流的中位数

题目链接求中位数,就要记得用两个堆,一个是大根堆,一个是小根堆。如图所示:左边箭头代表数的大小,下面的三角代表大根堆,上面的三角代表小根堆。大根堆里面维护一半小的数,小根堆里面维护一半大的数。加入一个数的时候:先加入到大根堆,然后判断大根堆的堆顶是不是要移到小根堆。如果总数个数是偶数个,则两个堆里面的个数一半一半,如果总是个数是奇数个,则大根堆里面的个数比小根堆里面的个数多一个。在求答案的时候,如果总数个数是偶数,答案是两个堆堆顶加起来的一半如果总数个数是奇数,答案是大根堆的堆顶。

2021-08-27 08:47:55 122

原创 Java 流 Stream

Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。forEachStream 提供了新的方法 ‘forEach’ 来迭代流中的每个数据。下面代码产生10个随机数并用forEach输出。Random random = new Random();random.ints(0, 100).limit(10).forEach(System.out::println); // 随机数的区间为[0,100]mapmap 方法用于映射每个元素到对应的结果,以下代码片段

2021-08-20 17:46:15 322

原创 Iterm2 + zsh 安装教程

本文严重严重抄袭: 这篇文章。另外加了一些自己的理解。下载iTerm2可以直接去官网下载:iterm2安装完成后,在/bin目录下会多出一个zsh的文件。Mac系统默认使用bash作为终端,可以使用命令修改默认使用zsh:chsh -s /bin/zsh如果想修改回默认 bash,同样使用chsh命令即可:chsh -s /bin/bashOK,这就是iTerm2初始的样子,下面我们来美化它,让它变得更好用!安装Oh my zsh安装方法有两种,可以使用curl或wget,看自己环境

2021-08-18 22:40:53 1517

原创 力扣 || 第 254 场周赛题解 || LeetCode

作为子字符串出现在单词中的字符串数目题意:就是找一个字符串是不是在另外一个字符串中出现过。思路:由于数据规模很小, 所以直接暴力就可以了。有函数可以用函数。暴力匹配:bool check(string s, string t) { for (int i = 0; i < t.length(); ++i){ bool vis = 0; for (int j = 0; j < s.length(); ++j) if (i+j

2021-08-15 17:49:23 157

原创 mac 必装软件

一个下载软件的网站自动切换输入法下载网址可以设定打开每个软件时候默认的输入法,省去切换输入法的时间iShot下载网址一款截图软件, 支持钉在桌面上,快捷键是 option + a。IINA看视频的软件Magnet把软件快速贴到四周。Dowine一款下载视频的软件Paste支持历史复制内容的粘贴。...

2021-07-19 23:12:23 101

原创 Docker 命令学习

帮助命令docker version # 版本信息docker info # docker 的系统信息, 镜像容器的数量docker 命令 --help # 万能命令帮助文档地址:官网文档镜像命令docker images # 显示本机所有镜像docker images -a # 列出所有镜像docker images -q # 只显示镜像iddocker search # 查找镜像docker pull 镜像[:tag] # 下载镜像, tag 是可选的,但

2021-07-16 08:40:47 80

原创 正则表达式记录 python

# matching stringimport repattern1 = "cat"pattern2 = "bird"string = "dog runs to cat"# print(pattern1 in string)# print(pattern2 in string)ptn = r"r[au]n"# print(re.search(ptn, string))# print(re.search(pattern2, string))print(re.search(r"r[A-Z

2021-06-15 16:07:49 174 2

原创 PD

语音信号有四个重要的参数:声道数、取样频率、量化位数(位深)和比特率。声道数:可以是单声道、双声道…采样频率(Sample rate):每秒内对声音信号采样样本的总数目,44100Hz采样频率意味着每秒钟信号被分解成44100份。换句话说,每隔1/1441001/1441001/144100秒就会存储一次,如果采样率高,那么媒体播放音频时会感觉信号是连续的。量化位数(Bit depth):也称为“位深”,每个采样点中信息的比特(bit)数。1 byte等于8 bit。通常有8bit、16bit、24

2021-04-22 13:46:01 951

原创 科目一总结问题

罚款 200 - 2000 ,并吊销驾驶证超速50%醉酒驾驶将车交给驾驶证被吊销人员开拼装车和报废车罚款 200 - 2000超速50%醉酒驾驶目前没有驾驶证但是驾驶车辆将机动车借给无证的人驾驶开拼装车和报废车造成交通事故后逃逸,尚不构成犯罪的。违反交通管制不停劝阻强制通行非法安装警报器和标志灯具该撤离现场但是没有撤离现场, 罚200元罚 20 - 200大型客车、牵引车。公交车信息变更,但是没有30日备案实习不贴标实习上高速有新证但是使用原来的证件。扣1

2021-03-24 18:04:02 174

原创 Java 多关键字排序

继承 Comparable接口一开始默认可以在类内部重写排序规则:首先继承排序接口:Comparable<Person>int compare(Person p1, Person p2) 返回一个基本类型的整型,返回负数表示:p1 小于 p2,返回0 表示: p1 和 p2相等,返回正数表示:p1 大于 p2所以重写排序规则的时候很灵活。如果类型是数字的话,可以直接用前一个减后一个, 其他类型用 compareTo 函数。如果从大到小排就 return 的时候

2021-03-09 15:07:37 1003

原创 IDEA 快捷键使用

vim使用行内移动: 命令 功能 w 跳转到下一个单词的首部 e 跳转到下一个单词的尾部 b 跳转到上一个单词 0 跳转到行首 $ 跳转到行未 编辑: 命令 功能 v 选中.

2021-03-09 14:48:31 249

原创 ArrayList 源码分析

ArrayList 简介:ArrayList 相当于一个动态数组, 他的容量可以动态增加。下图是ArrayList 的继承实现关系。需要注意的一点是,ArrayList 中的操作不是线程安全的。基本元素:ArrayList 属性主要就是当前数组的长度 size。 以及存放数组的对象 elementData。 还有一个经常用到的属性就是从AbstratList继承过来的modCount 属性, 代表 ArrayList 集合的修改次数。// 默认初始的容量大小为 10priva

2021-03-09 14:45:20 140

原创 常用集合的使用

概述 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口 Set下有HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vector,LinkedList Collection接口下还有个Queue接口,有PriorityQueue类 Map下有Hashtable,LinkedHashMap,HashMap,TreeMap Queue, Stack, Deque Ma

2021-03-09 14:42:45 173

原创 HashMap源码分析

概述HashMap 是一个关联数组、哈希表、红黑树的集合。是线程不安全的,允许key为null,value为null。遍历时无序。底层数据结构是数组称之为哈希表,每个位置里面放的是链表,链表中的每个节点,就是HashMap中的每个元素。如果链表里面的元素大于等于8个,就把链表转化成红黑树,提高查询效率。HashMap 的结构大致如下:下图是HashMap 继承和实现的接口:基本数据结构桶数组一个数组,每个位置后面是一个链表。transient N...

2021-02-13 16:29:11 139

原创 sublime 常用插件

安装package control组件,然后直接在线安装:按Ctrl+`调出console(注:避免热键冲突-View-show console)粘贴以下代码到命令行并回车:import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opene

2021-01-19 14:27:34 1040

原创 位运算

位运算计算机底层都是用二进制来表示的。每个数都可以表示成二进制的形式,位运算就是基于整数的二进制表示形式来进行的运算,所以运算起来还是很快的。常用的运算符有6种,分别是 与&、或|、异或^、取反~、左移<<、右移>>。基础操作运算符描述解释&与二进制对应位上都是1才是1|或二进制对应位上有1就是1^异或二进制对应位上不同才是1~取反0 变 1, 1 变 0<<左移各二进位全部左移若干

2020-12-14 11:27:50 263

原创

堆堆是一棵树,其每个节点都有一个键值,且每个节点的键值都大于等于/小于等于其父亲的键值。以大根堆为例,每个节点的键值都小于等于其父亲的键值,所以堆顶就是最大值。堆还支持插入操作,删除堆顶操作。操作时间复杂度取最值O(1)O(1)O(1)插入O(log2n)O(log_2n)O(log2​n)删除堆顶O(log2n)O(log_2n)O(log2​n)堆的结构最常见的堆的结构就是二叉堆,二叉堆就是完全二叉树。完全二叉树,从根往下数,除了最下层外都是全满(都有两

2020-12-12 22:15:18 128

原创 链表

链表数组和链表是在面试中经常问到的知识点。数组在内存中是连续存放的,所以支持随机访问,但是不支持在任意位置插入或删除元素。链表在内存中不是连续存放的,所以不支持随机访问,只能按顺序依次访问其中的元素,但是支持在任意位置插入或者删除元素。链表可以想象成是若干个节点组成的,每个节点有自己的数据,还有指向下一个节点地址的指针。单向链表单向链表里面的每个节点包含自己的数据和指向下一个节点的指针。链表的插入如果在节点A 节点B 之间加入 节点D, 就直接把节点A 的指针指向节点D, 节点D 的指针指向

2020-12-12 22:10:02 422

原创 队列

队列队列是一种“先进先出”的线性数据结构。可以从右端插入元素,左端弹出元素。所以第一进去的元素必然第一个出来。上图就是一个队列,队列里面有三个元素。外面有两个元素,其中1 号元素刚从队列里面出来,6 号元素是要进到队列里面。了解了队列的基本原理,我们们也可以用数组来模拟队列:定义数组和队列首尾位置,l为队首, r为队尾,一开始队列是空的 : int queue[SIZE], l = 1, r = 0;入队列 x : queue[++r] = x访问队首元素: queue[l]出队列

2020-12-10 16:54:54 761

原创

栈​ 栈是一种“先进后出”的线性数据结构。栈只有一端能够进出元素。能进出元素的一端叫栈顶,不能进出元素的一端叫栈底。当我们添加或者删除元素的时候,只能从栈顶操作。上图就是一个栈,栈里面有三个元素。其中 3 号元素是栈顶,1 号元素栈底。只有当前元素是栈顶的时候才能出栈。所以上图只有 3 号元素可以出栈。如果 3 号元素出栈,那么栈顶就会变成 2 号元素。例题​ 实现一个栈,支持 Push(入栈)、Pop(出栈)和 GetMax (查询栈内元素的最大值)三个操作,要求时间复杂度均为 O(1).思路

2020-12-08 17:06:42 3969

原创 贪心

贪心​ 和人的贪心一样,贪心算法就是让每一步总是按照某种指标选取最优。所以不是所有的贪心都能获得最后的答案,在我们使用贪心的时候,确保自己贪心算法的正确性。​ 在我们无计可施的时候,也可以想一下贪心的算法,获得部分的分数。常见套路按照某种规则排序,然后按照某种顺序选择例题选讲题意:你是一个老板,想要凑够 n 元,现在有 1元,5元,10元的纸票,问最少用多少张纸票才能凑够n元。示例:输入: n = 11输出: 2解释:一张 10 元, 一张 1 元 就可以组成11元。思路:有

2020-11-26 09:39:41 98

原创 前缀和&&差分

前缀和&&差分​ 这算两个小技巧吧,下面就给大家介绍一下他们的用处。前缀和一维前缀和题意:一个长度为 n 的数组a,有 q 次询问, 每次询问有两个数 l r,问数组中区间 [l,r]之间的数之和。示例:输入:第一行两个数,分别是 n 和 q, 第二行是 n 个数, 代表数组 a,接下来是 q 行, 每行两个数 l r, 5 31 2 3 4 51 22 2 1 5输出:3215定义一个数组 sum[i] , 代表前 i 个数之和,如果想求区间 [

2020-11-25 17:25:06 163

原创 排序

排序​ 排序是一个很重有的功能,平时也会经常用到排序。这篇文章会介绍三种常用的排序算法。还有其他的排序方法,比如堆排序,归并排序等等,这些排序会在后面的内容讲述。​ 以下排序的对象是一个数组 a,有 n 个元素,需要从小到大进行排序。选择排序​ 选择排序就是 n 次选择, 每次从剩下的元素中选择一个最小的出来。​ 即第 i 次选择就是从 i ~ n 这些位置中的元素里面找到一个最小的元素,然后和 i 这个位置进行交换。做完 n 次选择之后,数组就会变得有序。​ 第1次选择找到第1小的元素放在了0

2020-11-25 17:24:21 170

原创 模拟

模拟​ 模拟这一块就是考验代码水平了,它没有很难的思维逻辑,如果是模拟题的话,就是按照题目的要求来,一步一步的实现题目中的要求。考察的就是我们如何用代码来复现题目的意思。​ 通过写模拟题,可以了解选手掌握语言的能力。只有掌握好了语言基础,才可能随心所欲,想怎么实现就怎么实现。​ 如果觉得自己语言实现能力不太行的,建议多练一下模拟题,对提升代码能力很有帮助。技巧写模拟题时,遵循以下的建议有可能会提升做题速度:在动手写代码之前,在草纸上尽可能地写好要实现的流程。在代码中,尽量把每个部分模块化,写

2020-11-25 17:23:40 481

原创 分治

分治​ 分治分治,分而治之。 所以分治这个算法的过程就是:分解 -> 解决 -> 合并。分治和递归的关系很大:递归是一种编程技巧,一种解决问题的思维方式;分治算法很大程度上是基于递归的,解决更具体问题的算法思想。分治法能解决的问题一般有如下特征:该问题的规模缩小到一定的程度就可以容易地解决。该问题可以分解为若干个规模较小的相同问题。该问题所分解出的各个子问题是相互独立的,即子问题之间没有关联。这里我们拿归并排序举个例子:归并排序归并排序的基本流程如下。void merg

2020-11-25 17:23:05 160

原创 二分

二分​ 二分查找,是用来在一个有序数组中查找某一元素的算法。算法的巧妙之处在于它的时间复杂度十分优秀。在问题的答案具有单调性的情况下,我们也可以通过二分求解转换为二分判定。​ 在写二分算法的时候,也有非常多的实现方式,所以细节方面要仔细思考。对于整数的二分,主要要注意一下左右边界的问题,还有最终答案的取值。对于实数的二分,就只需要注意精度的问题。原理​ 以在一个升序数组中查找一个数为例。​ 它每次取当前部分的中间位置,把当前部分一分为二,分别为左区间和右区间。查找的数在左区间,就在左区间里面接着查

2020-11-25 15:06:31 123

原创 递推&&递归

递推&&递归​ 这两个名词有一点抽象,还是通过例子来具体理解吧。例题选讲:题意:剑指 Offer 10- I. 斐波那契数列写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007)示例

2020-11-25 15:05:25 136

原创 Java 快速入门指南

Java 入门指南Java 程序基础操作基本数据类型整数类型: byte short,int, long浮点数类型:float,double字符类型:char布尔类型:boolean类型字节数byte1short2int4long8float4double8char2如果需要传递一个数字,没有定义变量类型100 // 默认是 int 型100L // 默认是 long 型10.0 // 默认是 doub

2020-11-25 14:06:54 318

原创 算法复杂度分析

复杂度分析时间复杂度每一个算法题,都会有一个时间限制和空间限制。本文就拿时间限制为 1s 来讨论.就目前来说个人计算机 1s 大概可以执行 3e8次运算左右。所以时限 1s ,我们要保证程序运算次数不超过 3e8时间复杂度一般分为 $ O(n^2) $ O(nlog2n)O(nlog_2n)O(nlog2​n) O(n)O(n)O(n) O(log2n)O(log_2n)O(log2​n) O(1)O(1)O(1)$O(n^2) $ 相当于两次 for

2020-11-25 14:02:06 596

原创 算法学习指北

Algo这是一个关于算法的项目,受众主要是哪些想刷算法,但是不知道如何下手的朋友。我之前学习Python, Java 语言的时候, 一开始看的就是文档,按照文档一点一点的看,然后跟着写代码,有时候觉得太简单了,也就不想写代码了, 过了一段时间,之前学过的东西就全忘记了。我就是单纯的想学Python,Java没有目的性的去学,学完只会也没有去练。一段时间只会必然会忘记。总结下来就是,学习一样新的东西,首先要了解,有一个总体的印象,后期需要动手实践,不断的去熟练语法规则。学习算法也是这样,用什么语言刷题

2020-11-25 14:01:10 132

原创 Chrome Viminum 的快捷键

页面滚动符号含义j向下滚动k向上滚动h向左滚动l向右滚动gg滚动到页面顶部G滚动到页面底部d向下滚动半个页面u向上滚动半个页面r重新刷新页面链接操作符号含义yy复制当前页面地址到剪切板gi定位到页面第一个输入框g打开链接o在当前标签页打开链接、书签、历史记录O在新标签页打开链接、书签、历史记录等b在当前标签页打开书签B在新标签页打开书签t

2020-10-28 16:04:34 200

科目一易错知识点的总结

科目一易错知识点的总结

2021-03-23

空空如也

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

TA关注的人

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