- 博客(76)
- 资源 (6)
- 收藏
- 关注
原创 Mac下安装redis
1. 使用brew安装redisbrew install redis2. 运行redisbrew services start redis3. 下载可视化软件Redis Desktop Manager (下载链接)4. 为redis设置密码mac安装的配置文件在/usr/local/ect/redis.conf中vi /usr/local/ect/redis.conf找到 requirepass foobared,把foobared替换成你自己的密码。5. 测试连接输入账号密码即可
2020-12-14 14:37:23
237
原创 笔试问你线段树你却不会?
本文首发自本人微信公众号:今天你A了吗。每日算法讲解,面试题,冲刺BAT大厂。微信扫码关注吧:线段树:例题1 前言在上一章:《线段树:讲解与模版》中,我们讨论了线段树的原理并且给予了一套模版。我们在文中也提到,每个节点包含数组下标在 [i, j]范围内的聚合信息(如最大值,最小值,总和等)。具体细节大家可以点击上一篇文章进行查看。这次,我们找到了一道题:杭电 1166:敌兵布阵(链接在本文末尾)。对线段树的应用进行讲解。本文中线段树维护范围中数组的和。2 题目概述给定一个一位数组代表各个军营将
2020-11-06 22:20:04
330
原创 线段树:讲解与模板
本章内容介绍另一种数据结构—线段树,线段树和前文所提到的前缀和所能解决的问题相似,但使用场景不同。并且在下一章《线段树:例题讲解》会针对相关例题做出讨论。1 前缀和的局限性在使用前缀和时,我们必须保证所生成前缀和的原始数组不能发生元素的更新操作。以一维数组为例,一旦前缀和数组已经生成完毕,此时若改变原始数组中的某个值,那么其后面的前缀和都要发生更改。可以看出,前缀和方法重新生成前缀和数组的时间复杂度为O(N)2 线段树与前缀和的比较树是一种比较灵活的数据结构,可以用来解决某个范围内的数据聚.
2020-11-06 18:39:29
316
原创 前缀和(二)
本文首发自本人微信公众号:今天你A了吗。每日算法讲解,面试题,冲刺BAT大厂。微信扫码关注吧:昨天讲了前缀和(一)的内容,相信大家都很有收获,下面再接再厉,我们一起拿下前缀和(二)的内容。其实前缀和(一)讲的是一维前缀和,前缀和(二)将会讲二维前缀和的使用。一、介绍:什么是二维前缀和先看图,我们给定了一个3x7的二维整数网格mat。特别地,我们用sum[i][j]表示前i行前j列的网格中元素和,如sum[1][1]表示前一行前一列的元素和,相应的sum[0][1]和sum[1][0]就是0了。
2020-10-30 18:17:36
633
原创 前缀和(一)
本文首发自本人微信公众号:今天你A了吗。每日算法讲解,面试题,冲刺BAT大厂。微信扫码关注吧:![image.png](https://img-blog.csdnimg.cn/img_convert/0ca7cf7d80c69af1af304a1eac9c24d4.png#align=left&display=inline&height=146&margin=[object Object]&name=image.png&originHeight=624&or
2020-10-29 02:26:35
15362
4
原创 二叉树遍历:非递归
一个模板,只是换了一个输出的位置。前序遍历题目:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/class Solution { public List<Integer> preorderTraversal(TreeNode root) { if(root == null) return new ArrayList<Integer>();
2020-10-27 02:14:22
100
原创 快速幂
(1)递归方法根据幂运算的性质,可以得出:计算a的n次方,如果n是偶数(不为0),那么就先计算a的n/2次方,然后平方;如果n是奇数,那么就先计算a的n-1次方,再乘上a;递归出口是a的0次方为1。根据以上原理可以得出递归的方法。递归方法时间复杂度为logn,递归不可避免的带来空间消耗int myPow(int a, int n){ if(n == 0){ return 1; }else if(n % 2 == 1){ return myPow(a, n-1) * a; }else{
2020-10-22 15:10:34
119
原创 环形链表与快慢指针
在leetcode中,环形链表1是判断链表是否存在环,环形链表2是判断环的连接点是哪一个。存在两种解法:使用set进行存储,如果在遍历过程中,遇到set中有重复的,其实这两个问题都解决了,一个是判断出是否存在环,另一方面第一个重复的肯定就是连接点。使用快慢指针。慢指针一次移动一个,快指针一次移动两个。如果在快指针不等于null前相遇说明存在环,否则说明出现null这个链表就不存在环。环状链表1:/** * Definition for singly-linked list. * class
2020-10-10 14:07:30
196
原创 根据前序遍历、中序遍历或者后序遍历,中序遍历重构二叉树
在leetcode上有两题,分别是根据前序/后序 和中序遍历重构二叉树。思路都是一样的,但是要记住,在从后序遍历重构二叉树的时候,要先从右子树进行建立,因为后序遍历先遍历的是右子树。前序遍历+中序遍历(1)首先进行边界判断,如果遍历数组为0或者1的情况下,说明这个树只有一个顶点或者没有顶点,直接进行构造。(2)根据前序遍历和中序遍历建立二叉树的思路是:前序遍历依次每一个节点对应一个子树,这个节点在中序遍历中找到它相应的位置,它的左边(当然是在子树数组范围内)就是左子树的顶点,右边就是右子树的顶点。
2020-10-08 15:14:34
196
原创 Java面试:protected和private修饰符的区别
private public修饰符很常见,很多人对protected和default的权限产生疑惑:第一点:在同一个包中,protected和default表现一致,即,当main方法所在的类和使用了protected与default修饰属性、方法的类在同一个包下面时,可以直接通过类对象调用被修饰的属性和方法。在同一个包中发生的继承,protected和default表现同样一致。第二点:当main方法所在的类与使用了protected和default修饰属性、方法的类在不在同一个包下面时,使用其他包的
2020-09-30 16:51:55
438
原创 Java面试:多态
解释:同一操作作用于不同的对象,可以产生不同的效果。这就是多态。作用:提高代码的可维护性和拓展性。把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。总结:提高代码的复用增强可拓展性多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,就是同一种事物表现出的多种形态。代码: public abstract class Car { public void run();//让子类来运行
2020-09-30 16:01:48
236
原创 LeetCode 236. 二叉树的最近公共祖先
题目:给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。思路:采用递归的方法,最小公共父节点,要么在二者之间,要么是二者之一。递归的边界是,遇到空或者p或者q就返回当前的节点。一个节点的子节点,如果左节点返回的是空,右节点返回的是空,说明目前还没遇到p或者q,直接返回空。如果一个子节点为空,另一个不是,说明在一个子树中找到了这个节点,返回这个子节点即可。如果两个子节点都不是空,那么说明他就是最小公共父节点。代码:/** * Definition for a binary tree n
2020-09-27 11:07:20
179
原创 LeetCode 235. 二叉搜索树的最近公共祖先
题意:思路:三种情况:最小公共祖先为p节点,q是p的子树中的节点最小公共祖先为q节点,p是q的子树中的节点p和q分布在最小公共子树的两边利用二叉搜索树的性质,如果root值要是大于两个节点的值,说明还可以往root的左子树去探索,因为搜索二叉树的性质是中序遍历的结果递增。如果root的值小于两个节点的值,可以向root的右子进行探索。如果出现root的值等于p或者q,或者root在p和q之间的情况,说明就找到了最小的祖先。代码:/** * Definition for a bina
2020-09-27 10:47:44
107
原创 LeetCode 106. 从中序与后序遍历序列构造二叉树
题意:根据一棵树的中序遍历与后序遍历构造二叉树。思路:后序遍历从后往前看,就是相当于一个前序遍历。从后往前一个个遍历,就相当于遍历了每个子树的根节点。根据这个根节点对中序遍历的数组进行划分即可。采用递归进行解题。在构造子树的时候,注意先构造右子树,再构造左子树。可以理解为在后序遍历的数组中整个数组是先存储左子树的节点,再存储右子树的节点,最后存储根节点,我们从后往前遍历post数组,相当于反过来,就是要先建立右子树。代码:class Solution { Map<Intege
2020-09-26 00:05:13
291
原创 LeetCode 501. 二叉搜索树中的众数
思路:二叉搜索树的中序遍历就是一个递增/递减的数组。可以把这一题当做一个数组处理,遍历一遍数组,如果当前元素的值跟之前的元素值一样,那么count++。如果不一样count就置1。同时设置base记录上一个元素的值,max记录出现的最大的次数。具体考虑以下两个点:是否跟之前的元素相同相同加count++不相同count = 1count是否大于max如果大于max,说明之前数组中存储的众数已经不是出现次数最多的元素,要将max结果置换,并且清空结果数组,放上当前元素。如果等于ma
2020-09-25 00:40:47
118
原创 修改idea中的maven源
1. 在设置中搜索maven搜索maven,右边有个User settings file, 点击Override,然后根据这个文件地址找到这个文件。一般来说这个文件是不存在的,你可以自己去创建。windows右击新建即可,mac/linuxtouch settings.xml chmod 777 settings.xml2 打开settings.xml进行配置以阿里源为例,复制我这段代码进去即可:<settings xmlns="http://maven.apache.org/SETTIN
2020-08-23 13:45:04
1485
原创 一文轻松搞懂 链表反转
单链表反转(时间复杂度O(n), 空间复杂度O(1))的方法主要有以下三种:头插法:从第二个元素开始,依次把元素插到插入到头结点和第一个元素之间。指针逆转:把指向后面一个元素的指针指向前面一个元素递归法:本质上跟指针逆转相同前情提要:设置一个链表,带有头结点。元素为1->2->3->4倒转过来应该是:1.头插法:从第二个元素开始,每次选取一个元素插入到头结点和第一个节点之间。第一步:把 2 插到 head 和 1 之间第二步:把 3 插入 head 与 2 之
2020-08-23 01:44:52
426
原创 一文搞懂transient关键字
最详细的transient关键字讲解1.序列化1.1 什么是序列化1.2 以文件存储为例实现序列化2.transient关键字2.1 添加transient关键字2.2 静态变量不需要加transient首先上总结:用transient关键字标记的成员变量不参与序列化(Serialize)过程。也就是说,当Java对象进行存储、网络传输的时候,使用transient修饰的变量不会被序列化,保存、传输的数据中不会有被修饰的变量信息。静态变量不会被序列化,所以不需要加transient关键字。
2020-08-09 17:15:05
680
原创 Centos下 yum安装python3
更新一下yum:sudo yum -y update安装yum-utils 【一组扩展和补充yum的实用程序和插件】sudo yum -y install yum-utils安装CentOS开发工具 【用于允许您从源代码构建和编译软件】sudo yum -y groupinstall development安装EPEL:sudo yum -y install e...
2020-02-11 18:37:14
383
原创 Linux/Mac下查看端口占用并杀死进程
1. 查看端口占用情况比如,查看8888端口:(:8888前面要加空格)sudo lsof -i :8888我运行了jupyter notebook,所以显示如下:其中,PID就是进程号。2. 杀死进程杀死占用8888端口的进程,根据您上面给的PID 1210(chrome打开了jupyter notebook),PID 20728 (jupyter-server)。sudo k...
2020-01-28 02:07:12
824
原创 Mac下安装Jupyter notebook简明教程
总共分为三个步骤:文章目录1.使用pip命令进行安装2.运行3.关闭1.使用pip命令进行安装如果你电脑默认为python2(Mac默认)pip3 install jupyter当然你可以先给你的pip更新一下,可以忽略此步骤pip3 install --upgrade pip2.运行python3 -m IPython notebook3.关闭键盘Ctrl + C...
2019-11-20 20:21:10
2525
3
原创 python虚拟环境常见问题的解决(virtualenv与virtualenvwrapper)
文章目录1 基础概念1.1 什么是虚拟环境1.2 virtualenv 与 virtualwrapper的作用1.2.1 virtualenv1.2.2 virtualenvwrapper1.3 我是否两者都需要2 如何使用2.1 virtualenv的使用2.1.1 十分推荐官方文档2.1.2 安装2.1.3 创建虚拟环境2.1.4 继承之前的基础环境的模块2.1.5 使用虚拟环境2.1.5.1...
2019-11-05 11:14:22
2802
原创 2019保研南京大学软件学院后的一些感想
2019计算机类保研1.个人情况1.1 保研结果1.2 双非院校1.3 学习成绩1.4能力获奖2. 求学之路2.1 夏令营2.2 北京邮电2.3 东南软件2.4 南大软件2.4 浙大软件3. 个人选择4. 后话1.个人情况1.1 保研结果28号从凌晨,经过了漫长煎熬的等待,拿到了南京大学软件学院的offer。7月份拿到了北京邮电大学的offer,做室内定位,老师让抓紧过去实习,并不要再尝...
2019-10-01 01:16:41
9091
12
原创 计算机编码的发展
第一阶段:ASCII由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码第二阶段:风涌云起的各国编码但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到...
2019-03-10 13:21:26
1069
原创 01背包问题,完全背包问题的二维数组,一维数组的解答
关于01背包问题,完全背包问题,这里就不过多阐述。这里只是总结一下这两个问题的二维数组,一维数组的两种表达方式。为什么要用一位数组,两个原因:1.节约空间(二维变一维)2.时间复杂度降为线性。直接上代码,如果对01背包问题,完全背包问题有问题的推荐看一下《背包九讲》和其他博客。背包九讲:https://github.com/tianyicui/pack01背包问题可视化的网站:http:...
2019-02-16 14:30:59
3119
2
原创 牛客网浙江大学牛客网机试--二叉搜索树
题目: 牛客网链接概述: 给定两个序列,比较形成的二叉搜索树是否长得一样思路: 只要给出的数一样,他们的中序遍历肯定是一样的。那么我们可以用前序遍历判断。而且前序(已确定)+ 中序就可以确定一个二叉树。另外,要关注一下里面getchar的用法:在输入完整数后,会形成一个回车,在输入字符串的前面要用getchar()接住。gets()可用来输入数组。尽管给出的是整数,但是用char类型保存...
2019-02-14 23:56:56
271
原创 使用清华镜像pip安装TensorFlow
CPU版本:pip install tensorflow -i https://pypi.tuna.tsinghua.edu.cn/simpleGPU版本:pip install tensorflow-gpu -i https://pypi.tuna.tsinghua.edu.cn/simple当然你可以选择版本,上面是最新版本pip install tensorflow-gpu==...
2019-02-08 02:01:36
24544
3
原创 Ubuntu最简单方法更换Python3.x版本
快速安装python3,安装最新pip的简单方法:Ubuntu16.04自带python2.7,在我们实际使用中,会需要用到python3.x。今天就在这里写一个详细简单的更换python3.5的方法。建议切换3.5,因为这能从阿里源直接下,比那些ppa要快很多。1.更换阿里源(又快又稳)首先输入 vim /etc/apt/sources.list在编辑器中删掉之前所有内容,把下...
2019-02-08 01:23:54
1922
原创 牛客网浙江大学机试--寻找大富翁
题目: 牛客网链接思路: 给出一个数组,排序(所谓的财富榜)概述: 简单的sort函数的应用#include <iostream>#include <algorithm>using namespace std;bool cmp(int a, int b){ return a > b;}int main(){ int fortune[...
2019-02-04 15:23:16
295
原创 关于近期很火的视频解析APP
起源最近,QQ空间和朋友圈火起来一种广告,做任务(一般是转发什么,或者关注某些微商),领取全网视频VIP一年。类似下面这样:不禁产生了好奇,微商们好像又发现了什么新大陆,原价288的全网会员,不要99,只要加好友。好奇微商的黑科技我得研究一下。然后我就扫了几个码,下载了几个这样的APP,名字都差不多,都叫xx影视,xx视界。打开后,UI普遍是城乡结合风格,罗列着一大排平时碰都不敢碰...
2019-02-04 02:30:56
5296
原创 读《参与感》--品牌篇
100个梦想赞助商 视频链接。这是小米在2014年拍摄的宣传短片,当看到100个名字写在男主的赛车上的时候,人民同时也联想起来,第一版MIUI正式版的开机画面上,放着MIUI的第一批用户的ID。这些用户们陪伴着小米一路走来。小米把这个品牌做成了人们心中的一个故事,即使有一天辉煌会落幕,但是这段岁月的拼搏与陪伴,是小米给所有用户最好的礼物。不是劈开脑海,而是潜入大脑经典定位理论是指开创并主...
2019-02-02 21:52:54
520
原创 五行Python代码实现春节微信祝福神器(基于itchat)
春节就要到了,是否还在为微信群发祝福,微信回复祝福而烦恼,今天我们通过几行代码,来实现一个简(shi)单(yong)的春节微信祝福神器。五行代码实现春节回复神器我们先来看一下效果图(gif),实际实用的过程中可以加一个time.sleep()让回复显得更自然,不是那么快。这段代码已经在代码中注释出来。1.首先我们安装itchat包,大家可以去github上查看itchat的更多用法,it...
2019-02-02 17:45:12
12338
9
原创 牛客网浙江大学机试--找出直系亲属
题目: 牛客网链接概述: 用三个字母表示出三个人的关系,并回答提出的问题。思路: 这题采用两种方法:采用数组解决问题数组用来存储子女的下标(反正是独生子女),找关系的时候就不断地搜索子女。这里分为两种情况,一种是第一个字母是第二个字母的长辈,另一个是第一个字母是第二个字母的晚辈。只要把参数顺序倒过来即可。采用树的方法来解决问题。这里就没写粘贴的牛客网的代码。思路很清晰,很适合复习...
2019-02-02 00:45:43
372
原创 牛客网浙江大学机试--Sharing
题目: 牛客网链接概述: 给出两个字符串,用链表来表示(不是严谨的链表,只是表示出每个节点的起始位置,和下一个节点位置)。让找两个字符串的公共节点。思路: 就是用一个足够大的数组表示可能出现的地址,读取下一个地址,并将对应数组的值+1,当为2的时候就是前缀对应的地址。当有出现两次的节点一定是公共节点。我们在采用scanf输入字符的时候要考虑后面的空格或者回车,而采用cin却不会出现这样情况...
2019-02-01 15:10:45
275
原创 浙江大学机试--Grading
题目: 牛客网链接概述: 本题给出类似我们高考的评判条件,三个评卷老师,一个专家,看最终评判出多少分思路: 简单的逻辑问题#include <iostream>#include <cmath>#include <algorithm>using namespace std;int main(){ int p, t, g1, g2, g3, g...
2019-01-31 19:40:33
514
原创 浙江大学机试--畅通工程
题目: 牛客网链接概述: 给出m条道路,n个村庄,看这些道路能不能让所有村庄联通起来,如果能,输出联通的最小代价,如果不能,输出问号。思路: 最小生成树 Kruskal算法(并查集)。如果每个是相联通的,那么他们应该有一个共同的最终根节点。我们可以找出来一个与其他比较。用来判断是否这是个连通图#include <iostream>#include <algorithm&...
2019-01-31 18:32:04
330
Mendeley-Desktop-1.19.4-OSX-Universal.dmg
2019-11-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人