自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 问答 (1)
  • 收藏
  • 关注

原创 字符串hash用法

什么是字符串哈希其实字符串hash和我们平时在代码中使用的hash都是一样的,原理都是将字符串通过一系列算法,将他映射成一个N进制,并且我们要保证不同的字符串得到的N进制一定是不同的。为什么要有字符串hash这个东西?试想一下,我们对大量的单词进行对比比较,看哪些单词是重复出现过的,我们首先要将单词转换成ascii码,然后再比较他们的ascii码是否相等,这样会不会太浪费空间和时间,我们不妨先计算出这个单词的hash,然后再保存在内存里,这样我们比较两个单词,直接比较他们的字符串hash即可。至于如何计

2020-07-22 21:23:37 692

原创 二分搜索进阶用法

下面,我将从leetcode的一种高频题型来讲述一下关于我对二分搜索的一种进阶用法。从刷题以来,这种题型我经常遇见,由于经常遇见,所以说看见这种题我基本上就是直接ac了,不用怀疑,面对这种题型,完全不用动脑子,一套框架,直接带走,当然前提是你得知道这道题用这种方法可解才行,那么如何知道?下面我会告诉你们。题目描述这是一道来自leetcode的周赛第三题。1482. 制作 m 束花所需的最少天数。题目描述,可以自行点击链接查看,这里不做多的赘述。如果是第一次做这种题型的人,很容易写出O(n*m)时间

2020-06-21 12:33:01 303 1

原创 数字范围按位与

题目描述给定一个范围[m, n] 0 <= m, n <= 2147483647,返回此闭区间内的所有数字进行与运算后的结果。这是一道leetcode上的经典题目,下面我将介绍两种解法,当然有兴趣的可以去原网站看一下具体题目和官方解答。常规解法这种解法是最简单的,包括我一开始也是这样做的。具体代码如下:class Solution {public: int rangeBitwiseAnd(int m, int n) { int ans = m;

2020-05-31 20:01:43 298

原创 线段树真的很好写

线段树是什么?首先,应该明确线段树是一种数据结构,而不是算法,其次线段树能够很有效的解决数组上一些问题,所以在用线段树的时候,我们要明确在哪些地方用,以及用在什么地方。说得更加具体一点,例如说有一个数组[1, 3, 5, 7, 9],我们想要求下标从1到4的和,按照正常思路,我们遍历一遍数组,用一个变量来保存求和结果,只需要O(N)的时间复杂度就能够求出来了,这也许很快,但还不够快,至少在线段树面前,那么线段树能够做到什么程度?线段树能够只花费对数级的时间复杂度O(logN)求出来,至于如何做到,接着往下

2020-05-21 22:07:07 174

原创 拓扑排序真的很简单

什么是拓扑排序说拓扑排序之前,先来说一下为什么要有拓扑排序,假设,我们有一份课程表。我们学当前课程的时候,必须要满足学完某些课程的条件,才能学当前课程,我们把这种满足条件称为先决条件,用一张表表示如下:我们再把表抽象成图,就能够直观感受到课程之间的联系:ID课程名先决条件1高数2计算机高数3数据库计算机、英语4英语高数我们再把表抽象成图,就能够直观感受到课程之间的联系:再来看图,就能够看出每个课程之间的关系,如何学习每门课程的顺序就能够

2020-05-18 19:00:53 2500 2

原创 位运算知识点总结

概述任何一台计算机内部保存的是二进制,再进行逻辑运算和算术运算的时候,计算机只会对二进制执行运算,而计算机对二进制执行的运算叫做位运算。举例说明,计算机执行3 + 5是如何计算的。3: 0 0 0 0 0 0 1 15: 0 0 0 0 0 1 0 18: 0 0 0 0 1 0 0 0就这样讲十进制转换成二进制后,执行简单的0,1计算,我们平时再写代码的时候常用的运算符为(+,-,*,/,%),但是如何我们能合理的使用位运算,将很大程度上提高我们代码执行的效率。位运算符符号

2020-05-14 12:20:42 192

原创 啥?我写了个服务器

没想到我也是一个标题党写在前面去年,利用业余时间以及所学知识建了人生中第一个网站,这个网站也就我用来平时写写东西。当然前期就是写后端交互代码,把后端代码写好的话,免不了要放在服务器上,既然放在服务器上,我们肯定也要部署Web服务器,目前市面上常用的两款Web服务器就是apache和NginX,在我了解了这两款服务器后,我坚决的选择了后者,那就是鼎鼎大名的NginX。按F12可以查看到我网站的请求头里就有我的代理服务器版本号。当然博思平台也用的是此款服务器。总之,我们不妨先记住Ngin.

2020-05-14 12:18:44 205

原创 经典洗牌算法(KD:Knuth_Durstenfeld)

KD算法经常用于许多地方,作为经典的一种随机打乱算法(伪随机),KD算法无论是在时间复杂度以及空间复杂度都表现得十分优秀,他的空间复杂度为O(n),时间复杂度为O(1)。在遍历一遍得情况下,不用开辟额外得空间就可以原地打乱一个数组。我先来介绍KD算法实现得步骤:例如一个数组 arr = [2,3,1,4] 数组长度 len = 5 k = 1 随机返回[0, len - k]的一个数i, 将arr[i]与arr[len - k]交换,k++ 重复一二步,直到k=5...

2020-05-11 10:24:51 599 2

原创 迭代法遍历二叉树(简单思路)

前言今天在力扣做题时,看见了用前中后的方式来遍历二叉树的节点,题目要求的是用非递归的形式来求解,不过以前我写的是用递归方式。所以在这儿做个笔记。前序遍历思路其实思路很简单,回想递归法,我们每次先依次遍历左字树,再右子树,当前节点存在的话,我们就打印出当前节点,然后继续递归左右子树。非递归法也差不多,不过我们需要用栈存放每个节点,每次迭代时,取出栈顶元素即可,注意我们这里,入栈时是先入右子树 再是 左子树,因为我们栈的特点是先进后出,所以要后方左子树代码:def dlr(root):

2020-05-11 10:18:56 685

原创 如何优雅的进行幂计算

朴素算法幂计算最简单也最容易想到的算法当然是朴素算法了,不说了,直接看代码int mi(int n, int m) { int ans = 1; while (m > 0) { ans *= n; m--; } return ans;}时间复杂度:O(n)快速幂快速幂其实就是用了二分的思想,我们来看 2^10如何计算的2^10 = 2 ^ 5 x 2 ^ 5 = 32 x 32 =10242 ^ 5 = 2 ^ 2 x 2 ^ 2 x ...

2020-05-11 10:14:54 293

原创 如何优雅的求平方根

F&Q承太郎:DIO,来做一道题DIO:承太郎。来吧。(JOJO立)承太郎:求一个数的算术平方根,保留整数部分,简单吧,你一定很快就能做出来。DIO:Math.sqrt(x),太简单了。hahaha承太郎:你居然说用Math.sqrt(),不能用库函数!!!不能用库函数!!!不能用库函数!!!やれやれだぜ(真是够了),DIO:这!!砸瓦鲁多!!F二分法求一个正整数的算术平方根的话,这个平方根一定不会大于这个正整数的二分之一。所以我们可以利用二分法从区间[1,x / 2

2020-05-11 10:10:01 421

原创 力扣5406收集树上所有苹果的最少时间

废话先说今天本来是不想打周赛的,手贱不小心报名了(其实还是想去打),前两题不说了,都是很简单的题。直到遇到第三题,我停下了手,开始不断尝试各种方法,直到比赛结束我也没有完成,看了各路大神的解法后,才知道我是有多菜鸡。前两题:形成两个异或相等数组的三元组数目和用栈操作构建数组,第四题我一般直接放弃,除非第四题不难(那是不可能的)。本周周赛才完成两道题。成绩惨不忍睹,以后还是乖乖打周赛算了。看着大神十几分钟做完四道题,我还得努力才是。收集树上所有苹果的最少时间(点击标题,查看题目页)题目

2020-05-11 10:08:45 207

空空如也

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

TA关注的人

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