有小伙伴私聊我说刚开始刷LeetCode的时候,感到很吃力,刷题效率很低。我以前刷题的时候也遇到这个问题,直到后来看到这个谷歌师兄总结的刷题笔记,发现LeetCode刷题都是套路呀,掌握这些套路之后,就变得非常简单了!
这份笔记是作者在找工作的时候,刷了几百道的LeetCode题目,然后按照数据结构和算法进行分类总结成的,非常适合面试前阅读!
笔记讲解很详细,排版很用心,强烈推荐。看完这本笔记并且理解透彻之后,面试遇到中等难度的题目基本都能做出来了。
笔记分为算法和数据结构两大部分,又细分了十五个章节,详细讲解了刷LeetCode 时常用的技巧。书中包含了 LeetCode 大部分高频题目的答案,代码实现有C++和Java版本。
这本笔记共148页,内容分别有字符串、栈队列、树、排序、查找、BFS、DFS、贪心、动态规划等等。每一章节都会先进行详细的算法解释,然后精心挑选几道典型的题目进行实现操练。
有些不好理解的地方,还有配图讲解,实在是太赞啦!
在学习数据结构和算法,或者准备面试的小伙伴们,千万不要错过这份宝藏笔记!
我把手册放到github上面了,需要的小伙伴可以自行下载(数据结构与算法->谷歌大佬LeetCode刷题笔记):
http://github.com/Tyson0314/java-books
笔记放在Github仓库的数据结构与算法->谷歌大佬LeetCode刷题笔记。另外,这个仓库存放着上百本经典的计算机书籍,可以star一下,下次找书直接在上面搜索,仓库持续更新中~
访问不了github的小伙伴,也可以到这里下载:http://pan.quark.cn/s/d4b696450aea
码字不易,如果觉得对你有帮助,可以点个赞鼓励一下!
我是 @程序员大彬 ,专注Java后端硬核知识分享,欢迎大家关注~
参数项目”自修伴侣“需要LCD上显示时钟,考虑移植LVGL。查了一些资料LVGL生态还是不错,不过其强大也就意味的移植,应用开发不会简单;此外lvgl快速发展,以为找到的各种教程版本差异导致你整合到一起不一定能工作。最简便的方法就是站在前人的肩膀上,把手上获得相同硬件平台的lvgl(好像是最近master分支)模块(文件)拷贝到自己的工程,再在工程上对应修改。因为绕开了移植操作,最是方便happypath。也许有人会抬杠,那为什么不直接从那个lvgl的例程出发?因为lvgl只是显示,不是要是场景业务逻辑的核心,所以我的base工程可以是基础前后台main循环,也可以是rtos的架构:这里把lvgl模块摘出来,做最小的修改再放到需要的地方,快速验证移植,作为一个方便的起点。1.文件复制、工程配置base工程:CH32V307VCT6_test,就是循环打印的的工程lvgl工程:01.lvgl_v8.2_for_ch32v_evb_TencentOS-tiny,移植lvgl某个新版本的工程1)文件复制2)工程配置这个版本的lvgl只要添加其父目录,内部自己处理相对路径。和以前版本不一样。2
endnotex9是一款非常受欢迎的文献写作管理软件,它和word一起搭配使用能帮助用户更好更快速的工作,那么word2019与endnoteX9如何关联呢?endnotex9导入word2019教程带给大家,有需要的朋友收藏起来吧!下载安装好word与endnoteX9打开系统偏好设置里面的安全性和隐私。在隐私里面的自动化勾选endnotex9下面的【MicrosoftWord】。然后打开endnotex9,在左上角菜单栏里面,选择打开Customizer...。勾选CiteWhileYouWrite,然后点击next。点击next。完成后点击done。然后打开word2019.在左上角菜单栏,点击偏好设置。选择打开视图。勾选最下面的功能区的显示“开发工具”选项卡打开新建一个文档,显示endnotex9已经成功插入word2019!注意!如果没有显示,打开左上角菜单栏的【工具】,打开【模板和加载项…】。勾选红框内的两条即可!endnotex9导入word2019的方法是不是很简单呢?你学会了吗?
VuePress教程之深入理解插件API本文阅读重点<1VuePress教程之深入理解插件API2插件???2.1暖暖身2.2插件如何运作3准备3.1Markdown3.2Pages3.3Ready4自定义的指令5Dev5.1建立webpack配置5.2Devserver6Build6.1建立webpack配置6.2生成页面7总结别名:通过插件API来深入了解VuePress插件???Pluggable是VuePress1.x的最重大改变。vuepress提供给开发者许多API来打造他们的插件,VuePress本身的许多功能也是依靠插件化实现的。此外,.vuepress/config.js和theme/index.js其实也都被视为插件。我有天闪过一个想法,如果我了解了所有插件API的执行顺序以及他到底做了什么,或许这是一个特殊的方法来了解VuePress运作的来龙去脉。我有天闪过一个想法,如果我了解了所有插件API的执行顺序以及他到底做了什么,或许这是一个特殊的方法来了解VuePress运作的来龙去脉。暖暖身首先,来看看所有的插件API://hooks ready genera
前言:今天修改项目中一个有关WebView使用的bug,激起了我总结WebView的动机,今天抽空做个总结。简介WebView是一个基于webkit引擎、展现web页面的控件。Android的Webview在低版本和高版本采用了不同的webkit版本内核,4.4后直接使用了Chrome。作用显示和渲染Web页面直接使用html文件(网络上或本地assets中)作布局可和JavaScript交互调用WebView控件功能强大,除了具有一般View的属性和设置外,还可以对url请求、页面加载、渲染、页面交互进行强大的处理。混合开发相关博客:Android混合开发之WebView使用总结Android混合开发之WebView与Javascript交互使用场景:1.)添加权限<uses-permissionandroid:name="android.permission.INTERNET"/复制2.)布局文件<WebView android:id="@+id/webView" android:layout_width="match_
说明:此头像类似微信群组头像,整个头像由组内前N位人员的头像组合而成,可用网络或本地图片进行组合,最终显示为一个头像整体,看效果图:一、自定义整体头像的ViewGroup,计算并保存宽高(重写onMeasure):@Override protectedvoidonMeasure(intwidthMeasureSpec,intheightMeasureSpec){ mWidth=getWidth(widthMeasureSpec); mHeight=getHeight(heightMeasureSpec); setMeasuredDimension(mWidth,mHeight); } privateintgetWidth(intmeasureSpec){ intwidth=MIN_WIDTH_AND_HEIGHT; intspecMode=MeasureSpec.getMode(measureSpec); intspecSize=MeasureSpec.getSize(measureSpec); if(specMode==MeasureSpec.EXACTLY){ width=spe
Excel技巧:Excel中如何快速实现对工作表的2个以上区域的对比查看?技巧130介绍了有关对工作表不同区域的查看方法。但工作的需求总是不断的提高,有微信朋友留言问,如果在查看的工作表不同的区域超过2个以上怎么办?问题:如何快速查看工作表2个以上的区域对比查看?解答:Excel确实为大家想到了,利用拆分功能就可以轻松实现。具体方法如下:打开Excel工作表,单击“视图-拆分”按钮。(下图1处)会把工作表“拆成“四个部分。效果如下图。您会看到自动产生十字交叉两条线,您可以通过鼠标对两条拆分线进行拖拽。(下图2、3处)注意工作表下方的拖拽拉杆,拖拽至您需要的位置即可进行最多四个画面的数据对比查看。(下图4处) 这里有个小技巧,如果继续点冻结窗口按钮,工作表就会按照您拆分线所在的位置进行窗口冻结。(下图5处)效果大家可以下载素材亲自试试看哟。 总结:总体拆分功能是新建窗口更加快捷的补充,也许您会说哪如果我要看超过5个工作表不同位置的查看怎么办?那…那还是回归“新建窗口“功能吧,想开多少个就开多少个?只是你的电脑屏幕真的够放大吗?2
在姿态估计算法中,微软开发的SimpleBaseline是精度高而又轻量级的典范,昨天一篇论文SimpleandLightweightHumanPoseEstimation,在该架构基础上做了少许改进,取得了更快的速度和更小的模型Size。论文作者信息:作者均来自南京大学。 该文发明的轻量级姿态估计网络LPN架构: 与SimpleBaseline类似,LPN由一个主干网络和几个上采样层组成,不同的是,作者重新设计了网络中在下采样阶段的基础组件即轻量级Bottleneck模块,并同时在上采样阶段也选择了轻量级的形式。 改进的Bottleneck模块如下图:(a)为标准Bottleneck模块,(b)为改进的Bottleneck模块,将标准卷积替换为深度可分离卷积,同时expansion参数从4设为1,同时为了使网络能够更好的建模全局上下文信息,作者又进一步在Bottleneck中添加了GCblock(globalcontextblock),如(c),(d)为GCblock结构示意图。另外,作者发明了一种迭代式的训练方法,在不使用ImageNet数据集上预训练的分类网络时,可以有效改进最终
单服100w长连接报告笔记建议直接看参考的原版报告,这篇为我大致记录的一些配置,部分还为理解,后续进行修改补充。C1000K从C1000K说起,C1000K是什么意思?为了搞清楚这个问题,必须先提起”TheC10Kproblem”(http://www.kegel.com/c10k.html),顾名思义10K就是1万,这篇文章可以说是高性能服务器开发的一个标志性文档,它讨论的就是单机为1万个连接提供服务这个问题,当时因为硬件和软件的限制,单机1万还是一个非常值得挑战的目标。但是时光荏苒,随着硬件和软件的飞速发展,单机1万的目标已经变成了最简单不过的事情。现在用任何一种主流语言都能提供单机1万的并发处理的能力。所以现在目标早已提高了100倍,变成C1000k,也就是一台服务器为100万连接提供服务。国外公司whatapps的曾经分享过相关内容,他们在2011年9月宣称完成了单机100万用户支持(他们最后做到了C2000k,而且是实打实的在线用户)。所以C10M,C100M才是今后继续努力的方向,系统准备硬件服务器首先查看服务器的信息dmidecode|grep"ProductN
一般来说,我们把Java的类加载过程分为三个主要步骤: 加载、链接、初始化, 具体行为在Java虚拟机规范里有非常详细的定义。首先是加载阶段(Loading),它是Java将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构(Class对象),这里的数据源可能是各种各样的形态,如jar文件、class文件,甚至是网络数据源等;如果输入数据不是ClassFile的结构,则会抛出ClassFormatError。 加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的类加载过程。一般来说,我们把Java的类加载过程分为三个主要步骤:加载、链接、初始化,具体行为在Java虚拟机规范里有非常详细的定义。 首先是加载阶段(Loading),它是Java将字节码数据从不同的数据源读取到JVM中,并映射为JVM认可的数据结构(Class对象),这里的数据源可能是各种各样的形态,如jar文件、class文件,甚至是网络数据源等;如果输入数据不是ClassFile的结构,则会抛出 ClassFormatError。 加载阶段是用户参与的阶段,我们可以自定义类加载器,去实现自己的
1.先更新系统并安装相关依赖包$sudoaptupdate $sudoaptinstallapt-transport-httpsca-certificatescurlsoftware-properties-common复制2.新建并编辑etc/apt/sources.list.d/docker.list文件$sudovi/etc/apt/sources.list.d/docker.list 文件内容如下: deb[arch=amd64]https://download.docker.com/linux/ubuntubionicstable复制3.添加秘钥$curl-fsSLhttps://download.docker.com/linux/ubuntu/gpg|sudoapt-keyadd-复制4.更新docker源apt仓库信息$sudoaptupdate复制5.安装docker-ce$sudoaptinstalldocker-ce复制6.验证$docker--version复制(adsbygoogle=window.adsbygoogle||[]).push({});
随着互联网和移动互联网的发展,各个机构都需要支撑远超过以往的数据。而在这个需求的刺激下,IT领域出现了大量数据处理技术,其中之一就是NoSQL。灵活的数据类型,高效的处理能力,让NoSQL已占据数据管理系统的一席之地,比如人气NoSQL数据库MongoDB。然而在Wix工程实践中,他们发现,大量场景中其实并不需要NoSQL,反而成熟的RDBMS更具效益,比如MySQL。下面一起看Wix工程主管AviranMordo的分享,由OneAPM工程师翻译。以下为译文开发人员选择NoSQL数据库一般都是根据主观臆断,或者“关系型数据库性能不如NoSQL数据库”这个错误的理念。此外,在做数据库选型时,开发人员往往还忽视了运维上的开销。实际上根据Wix的实践发现,大部分情况下都不必去选择NoSQL数据库,而且如果使用得当的话,MySQL也可以是一个优秀的NoSQL数据库。在可扩展系统构建时,一个很重要的考量是使用的技术是否成熟,选择成熟的技术意味着出错时能够迅速恢复。当然,开发者也可以在项目中使用最新最牛的NoSQL数据库,而这个数据库在理论上也可以良好地运行,然而在生产环境中出现了问题恢复需要多久
SpringBoot核心功能1、独立运行Spring项目Springboot可以以jar包形式独立运行,运行一个SpringBoot项目只需要通过java-jarxx.jar来运行。2、内嵌servlet容器SpringBoot可以选择内嵌Tomcat、jetty或者Undertow,这样我们无须以war包形式部署项目。3、提供starter简化Maven配置spring提供了一系列的startpom来简化Maven的依赖加载,例如,当你使用了spring-boot-starter-web,会自动加入如图5-1所示的依赖包。4、自动装配SpringSpringBoot会根据在类路径中的jar包,类、为jar包里面的类自动配置Bean,这样会极大地减少我们要使用的配置。当然,SpringBoot只考虑大多数的开发场景,并不是所有的场景,若在实际开发中我们需要配置Bean,而SpringBoot灭有提供支持,则可以自定义自动配置。5、准生产的应用监控SpringBoot提供基于httpsshtelnet对运行时的项目进行监控。6、无代码生产和xml配置 SpringBoot不是借助与代码
orderly:1、SUSPEND_CURRENT_QUEUE_A_MOMENT:在本地重试,先判断重新消费次数有没有达到最大值(consumer定义的时候传入,不传为Integer最大值),如果没达到,重试次数+1,放入消费池,1秒(默认)之后再消费,直到达到最大消费次数。发送到重试队列(这个时候必然会进入死信队列,因为broker收到之后拿来比较的最大消费次数,也是consumer定义的时候传入的,是sendMessageBack方法,用defaultMQPushConsumer.getMaxReconsumeTimes()取出来的)。所以用orderly消费,需要特别注意不要无限制重试的问题 2、上面讨论的是每批取出的消息数量是1的情况,如果每批取出数量大于1,SUSPEND_CURRENT_QUEUE_A_MOMENT这个状态代表的是当前批次的所有消息消费不成功,达到最大重试次数后,发送回重试队列,如果其中有一条没有发送成功,整批消息本地重试, 这种设计在极端情况下,也是没办法保证消息的有序性的。 concurrently:3、在返回值是CONSUME_SUCCESS的时候,广
一)工具下载 a)eclipse(最新版4.3.1)官网下载地址 http://www.eclipse.org/downloads/ b)python(2.X版本)官网下载地址 http://python.org/getit/releases/2.7.6/ c)django(最新版本1.6)官网下载地址https://www.djangoproject.com/download/ 二)安装 a)eclipse解压后即可使用 b)双击python-2.7.5.amd64.msi文件默认安装即可 c)django:cd到django下载目录下,然后pythonsetup.pyinstall(需要在环境变量path中,设置python安装目录) d)pydev安装:eclipse->help->installnew...-> 安装完成后重启eclipse。 e)pydev配置:windows->perferences->pydev->interpreters->pythoninterpretersauo-config即
看起来noip特别喜欢考这种思维题== 题意:有n家客栈,每家客栈有一个颜色和一个花费。给定最大允许花费,选择两家颜色相同的客栈,问有多少种选择方式使得两家客栈之间至少有一家花费允许的最大值的客栈 可以想到一些n²甚至n³的方法,但显然不足以满足所有数据 考虑对于每一家客栈,从右往左扫描,找到第一家满足条件的颜色相同的客栈,其左边的所有颜色相同的客栈也就都满足条件了 所以此题可以巧妙地运用一些临时变量来记录当前可行的方案数,从而O(n)地解决问题 详见代码 #include<cstdio> #include<cstring> #include<algorithm> usingnamespacestd; constintmaxk=55; inttot_col[maxk],last[maxk],linshi[maxk]; //tot_col表示每个颜色出现的总次数,last表示该种颜色上一次出现的位置 intmain(){ intn,k,p; intpos,ans=0; scanf("%d%d%d",&n,&k,&p); fo
累计进度条 PSP 饼图 每周例行报告 本周PSP 类别 任务 开始时间 结束时间 被打断时间 总计工作时间 2016年9月24日 读书 构建之法-6.7章 19:00 20:00 2 58min 2016年9月25日 看博客 看测试相关内容 8:30 9:30 0 60min 设计复审 重新审视四则运算的要求 9:40 9:50 0 10min 代码复审+具体编码 1.加入输出正确结果的功能 9:50 11:30 6min 94min 测试+写博客 1.对四则运算进行测试 2.提交代码改进原来代码一大段的不足,进行分段解析 15:00 16:00 0 60min 写博客 写博客.站立会议内容进行总结 18:30 22:30 7 233min 2016年9月27日 分析需求 四人项目设计 10:30 11:30 8 52min 编程 四人项目的jsp和html设计 18:30 20:30 7 113min
密钥是AES算法实现加密和解密的根本。对称加密算法之所以对称,是因为这类算法对明文的加密和解密需要使用同一个密钥。 AES支持三种长度的密钥:128位,192位,256位 平时大家所说的AES128,AES192,AES256,实际上就是指AES算法对不同长度密钥的使用。 三种密钥的区别: 从安全性来看,AES256安全性最高。从性能看,AES128性能最高。本质原因是它们的加密处理轮数不同。 AES原理:AES是对数据按128位,也就是16个字节进行分组进行加密的,每次对一组数据加密需要运行多轮,而输入密钥的长度可以为128、192和256位,也就是16个字节、24个字节和32个字节,如果用户输入的密钥长度不是这几种长度,也会补成这几种长度。 无论输入密钥是多少字节,加密还是以16字节的数据一组来进行的,密钥长度的不同仅仅影响加密运行的轮数。 importjavax.crypto.Cipher; importjavax.crypto.KeyGenerator; importjavax.crypto.SecretKey; importjavax.crypto.spec.IvPar
上午看了想了好长时间,下午用了一个多小时才写出来,主要对回溯没怎么写过。 第一题树形dp。 题意就是有关系的两个人不能同时出现。 dp1【s】表示s点去。 dp2【s】表示s点不去。 dp1【s】+=dp2【x】。//s点去,zex点不去 (s为父节点)。 dp2【s】+=max(dp1【x】,dp2【x】);//s点不去,则x去或不去的最大的一个 1#include<cstdio> 2#include<cstring> 3#include<iostream> 4#include<vector> 5usingnamespacestd; 6vector<int>V[6006]; 7intvis[6006]; 8intdp1[6006];//去 9intdp2[6006];//不去 10voidinit() 11{ 12for(inti=0;i<6005;i++) 13V[i].clear(); 14memset(dp1,0,sizeof(dp1)); 15memset(dp2,0,sizeof(d
1.查询 Linq: varss=fromrindb.studentselectr;复制 Lamda: varss=db.student;复制 SQL: select*fromstudent复制 2.条件查询 Linq varss=fromrindb.studentwherer.s_number>10selectr;复制 Lamda varss=db.student.Where(r=>r.s_number>10);复制 SQL: select*fromstudentwherenumber>10复制 3.简单的计算 Linq: //最大的s_number varss=(fromrindb.studentselectr).Max(r=>r.s_number); //最小的s_number varss=(fromrindb.studentselectr).Min(r=>r.s_number); //student数据总数 varss=(fromrindb.studentselectr).Count(); //s_num
redis安装目录结构: redis-5.0.10/ ├──bin │ ├──redis-benchmark │ ├──redis-check-aof │ ├──redis-check-rdb │ ├──redis-cli │ ├──redis-sentinel->redis-server │ └──redis-server ├──conf │ ├──redis-6379.conf │ ├──redis-6479.conf │ ├──redis.conf.default │ ├──sentinel.conf │ └──sentinel.conf.default ├──data ├──log │ ├──redis_6379.log │ └──redis_6479.log └──pid ├──redi