自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zero4eva的专栏

为了写出更好的代码!

  • 博客(37)
  • 收藏
  • 关注

原创 Java源码解读(三)——HashMap深入理解之增删查改

主要成员变量// 存储的键值对,其length为capacitytransient Node<K,V>[] table;// 实际存储的键值对的个数,超过threshold则resizetransient int size;// 修改次数,当put/remove/clear等改变集合的操作时,都会加一// 用于并发情况下:A线程迭代器遍历,B线程改变集合,此时出现fai...

2019-08-10 01:12:27 335

原创 最长连续序列

题目给定一个未排序的整数数组,找出最长连续序列的长度。要求算法的时间复杂度为 O(n)。示例:输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/longest-consecutive-sequence...

2019-07-19 02:19:56 205

原创 从中序与后序遍历序列构造二叉树

题目根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7递归分治因为后序遍历的顺序是(左,右,根),最后一个节点总是根节点,而中...

2019-07-17 19:30:25 208

原创 对称二叉树(递归+迭代)

题目给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3说明:如果你可以运用递归和迭代两种方法解决这个问题...

2019-07-16 02:25:56 273

原创 二叉树的后序遍历(递归+迭代)

题目给定一个二叉树,返回它的 后序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [3,2,1]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归/** * Definition for a binary tree node. * public class TreeNode { * int v...

2019-07-15 23:40:45 685

原创 二叉树的中序遍历(递归+迭代)

题目给定一个二叉树,返回它的 中序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3输出: [1,3,2]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归/** * Definition for a binary tree node. * public class TreeNode { * int val;...

2019-07-15 17:39:22 295 1

原创 二叉树的前序遍历(递归+迭代)

题目给定一个二叉树,返回它的 前序 遍历。示例:输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]进阶: 递归算法很简单,你可以通过迭代算法完成吗?递归递归确实简单,随便写一个。/** * Definition for a binary tree node. * public class TreeNode ...

2019-07-15 16:28:23 227

原创 C++数组越界

最近在看C++ Primer Plus,发现一个有趣的溢出。代码:编译用的cygwin c++,分配方式与编译环境有关哦int main() { double a[4] = {1.2, 2.4, 3.6, 4.8}; array<double, 4> b = {3.14, 2.53, 3.545, 6.34}; cout << a <<...

2019-07-06 01:58:05 209

原创 目标和

题目给定一个非负整数数组,a1, a2, ..., an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例 1:输入: nums: [1, 1, 1, 1, 1], S: 3输出: 5解释: -1+1+1+1+1 = 3+1-1+1+1+1 =...

2019-07-03 22:20:40 116

原创 打开转盘锁

题目你有一个带有四个圆形拨轮的转盘锁。每个拨轮都有10个数字: '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' 。每个拨轮可以自由旋转:例如把 '9' 变为 '0','0' 变为 '9' 。每次旋转都只能旋转一个拨轮的一位数字。锁的初始数字为 '0000' ,一个代表四个拨轮的数字的字符串。列表 deadends 包含了一组死亡数字,一旦拨...

2019-07-01 23:15:20 462

原创 每日温度

题目根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温...

2019-07-01 22:38:49 140

原创 岛屿数量

题目给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。示例 1:输入:11110110101100000000输出: 1示例 2:输入:11000110000010000011输出: 3来源:力扣(LeetCode)链接:htt...

2019-07-01 21:39:47 6272

原创 字符串匹配——KMP算法

前段时间被问了字符串匹配的问题,用的是暴力,一直想填KMP的坑,这篇文章就记录一下,方便你我他,希望能讲清楚。概念本篇文章的一些约束说明,可能与其他文章不一样,但是原理一样的~前缀:对于一个字符串s,从第一个字符开始的子串,长度不超过s的一半。后缀:对于一个字符串s,以最后一个字符结尾的子串,长度不超过s的一半。最长相同前后缀 :对于一个字符串s,其前缀子串与后缀子串相同,...

2019-06-20 00:41:09 463

原创 鸡蛋掉落

题目你将获得 K 个鸡蛋,并可以使用一栋从 1 到 N 共有 N 层楼的建筑。每个蛋的功能都是一样的,如果一个蛋碎了,你就不能再把它掉下去。你知道存在楼层 F ,满足 0 <= F <= N 任何从高于 F 的楼层落下的鸡蛋都会碎,从 F 楼层或比它低的楼层落下的鸡蛋都不会破。每次移动,你可以取一个鸡蛋(如果你有完整的鸡蛋)并把它从任一楼层 X 扔下(满足 1 <= ...

2019-06-14 02:25:57 1303

原创 最小编辑距离

最近在学算法,这个动态规划题目比较有意思,似乎现在的机器翻译和语音识别也会用到它。也有一定的难度,在leetcode上是困难难度。题目给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符 删除一个字符 替换一个字符示例 1:输入: word1 = “horse”, word2 = “r...

2019-06-10 20:11:38 343

原创 Java源码解读(二)——String中的indexOf(String)

前天面试,面试官给了我一小时,让我写一个判断子串的函数,我虽然想到了KMP,但是不知其实现原理,就写了个暴力算法。今天看了一下Java源码中查找子串的函数,发现它们也是用的暴力(笑:先遍历父串,找到与子串第一个字符相同的字符的索引,再从该索引开始进行后面字符的比较,如果成功则返回该索引,否则从该索引后面继续寻找子串。indexOf(String)public int indexOf(Stri...

2019-06-06 17:54:26 2123 9

原创 无重复字符的最长子串

题目https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/解答暴力法穷举所有子串,子串起始位置为 i ( i >= 0 ),结尾位置为 j ( i <= j <= len ),判断它们有无重复字符,记录它们的长度,找出最长的。时间复杂度 O(n^3)。跳跃的滑动窗...

2019-06-05 22:53:46 108

原创 Java源码解读(一)——HashMap的resize与put

HashMap是java面试必不可少的问题之一,这里只列出了java1.8中比较难读懂的put操作的源码,get操作的源码请自行阅读。new申请内存是在第一次的put操作时进行的resizefinal Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == ...

2019-06-05 18:01:58 715

原创 生活感悟总结

写在前面顾名思义,这里总结了因为我的某些操作而造成了某些结果,而后引发的感想因为某本小说,某段文字,某个动画,某个情节,引起的共鸣不断更新,希望能够时刻警醒自己;-)感悟命运掌握在自己手中,他人可依而不可靠。读史使人明智,习古而鉴今。古人诚不欺我。一味的知而后行会导致眼高手低。知行合一的道理大家都懂,可做到者寥寥。人与人之间最小的区别是IQ,最大的区别是坚持。如果你会的知...

2019-05-25 23:38:38 292

原创 每天一个设计模式(六)——代理模式

什么用顾名思义,代理模式就是本该由客户直接调用某一目标对象,但却由于客户不想或不能或者由于其他某些原因,没有直接调用该对象,而是通过中间对象去调用目标对象。该中间对象即为代理,它不仅起到中介的作用,还能隐去客户不能看见的内容,或者添加客户需要的额外服务。RMI调用就是一种代理模式。远程服务器中的服务在本地有一个stub代理,该代理封装了访问远程服务的方法,客户可通过该代理来调用远程服务。Sp...

2019-05-25 22:56:27 105

原创 每天一个设计模式(五)——单例模式

什么用实际上我们经常见到这种设计模式。当你要打印东西时,你有很多个打印任务,但正在工作的却只有一个;当你从数据库获取数据时,看上去你会建立很多次连接,但其实你的连接都是从唯一的数据库连接池中获取的;还有Spring中的bean一般默认是单例的。对于这种要么没有实例,有就只有一个实例的类,我们可以让类自己保存它的唯一实例,保证没有其他实例被创建,并且向外部提供一个访问该实例的方法。模式结构...

2019-05-17 23:54:18 196

原创 每天一个设计模式(四)——建造者模式

什么用软件开发中,会碰到这样的情况:一个类的内部数据过于复杂,拥有很多成员属性,这些成员属性中有的是引用类型的成员对象;当创建该类的实例时,有些属性的赋值还必须按照某种顺序,一个属性没有赋值之前,另一个属性可能无法赋值等。当我们遇到这种情况真的是一种痛苦,我们只想用它,但是我们却要花费时间去了解它的内部结构和怎么组装它。这个时候,建造者模式就可以帮我们减轻痛苦了。假设场景:装机系统可以帮用户将...

2019-05-16 22:12:58 150

原创 每天一个设计模式(三)——抽象工厂模式

创建型模式中的工厂系列,有:简单工厂模式、工厂方法模式、抽象工厂模式。什么用当你想拥有多个工厂,并且一个工厂可以生产多个产品时,你可以使用抽象工厂模式。产品种类:不同的抽象产品即为不同的产品种类。产品族:同一个工厂生产的,不同产品种类的一组产品。场景改变:画图系统想要画出不同风格(规则、手工)的图形,并且可以随时将不同的图形统一替换成其他风格。我们先对每一个图形都定义一个抽象图形类,并定...

2019-05-16 00:33:46 129

原创 每天一个设计模式(二)——工厂方法模式

创建型模式中的工厂系列,有:简单工厂模式、工厂方法模式、抽象工厂模式。什么用工厂方法模式在简单工厂模式上做进一步抽象,实现后的功能是这样的:当你需要什么,你就创建生产这个产品的工厂,并用它获取你需要的对象,不用关注创建细节。场景变化:画图系统不再用同一个工厂来统一负责所有图形的创建,而是将具体图形的创建过程交给专门的工厂子类去完成。我们先定义一个抽象的图形工厂类,再定义具体的工厂类来生成图形...

2019-05-14 23:32:52 120

原创 每天一个设计模式(一)——简单工厂模式

创建型模式中的工厂系列,有:简单工厂模式、工厂方法模式、抽象工厂模式。什么用降低对象之间的耦合度扩展性比较好简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责,但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。简单工厂模式适用情况包括:工厂类负责创建的对象比较少;客户端只知...

2019-05-13 23:36:57 252

原创 每天一个设计模式——写在前面

读史使人明智,读诗使人聪明,演算使人精密,哲理使人深刻,伦理学使人有修养,逻辑修辞使人长于思辩。——《培根随笔》为什么学关于过度设计...

2019-05-10 23:10:44 208

原创 子数组的最小值之和

子数组的最小值之和给定一个整数数组 A,找到 min(B) 的总和,其中 B 的范围为 A 的每个(连续)子数组。由于答案可能很大,因此返回答案模 10^9 + 7。示例:输入:[3,1,2,4]输出:17解释:子数组为 [3],[1],[2],[4],[3,1],[1,2],[2,4],[3,1,2],[1,2,4],[3,1,2,4]。最小值为 3,1,2,4,1,1,2,1,...

2018-09-27 14:45:59 1501

原创 按奇偶校验排序数组

按奇偶校验排序数组给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素。你可以返回满足此条件的任何数组作为答案。示例:输入:[3,1,2,4]输出:[2,4,3,1]输出 [4,2,3,1],[2,4,1,3] 和 [4,2,1,3] 也会被接受。提示:1 &lt;= A.length &lt;= 50000 &lt;= A[i] &lt...

2018-09-25 15:37:41 414

原创 水果成蓝

题目水果成篮在一排树中,第 i 棵树产生 tree[i] 型的水果。你可以从你选择的任何树开始,然后重复执行以下步骤:把这棵树上的水果放进你的篮子里。如果你做不到,就停下来。移动到当前树右侧的下一棵树。如果右边没有树,就停下来。请注意,在选择一颗树后,你没有任何选择:你必须执行步骤 1,然后执行步骤 2,然后返回步骤 1,然后执行步骤 2,依此类推,直至停止。你有两个篮子,每个篮子可...

2018-09-22 15:20:47 188

原创 二阶魔方旋转

题目转动魔方题目描述二阶魔方有6个不同颜色的面,分别是红(Red),橙(Orange),黄(Yellow),白(White),蓝(Blue)和绿色(Green),每个面都有 4个小正方块拼成初始状态:魔方已经还原,并且W色朝下,Y色向上,R色在前,O色在后,B色左边,G色右边。定义三种旋转操作:输入说明以命令行参数的形式,输入任意的旋转操作字符串序列, 如 XYZZXint...

2018-09-19 19:38:33 997

原创 网格游戏

题目网格游戏题目描述有一个m*n的游戏地图,地图的起点在左上角(0,0),终点在右下角(m-1, n-1),每个坐标点上有不同数量的金币,游戏开始后每经过一个坐标点,就可以获得该坐标点上的金币,要求玩家从起点开始,只能向下或向右移动。请求出玩家最多能获得多少金币。输入说明程序从当前路径下的data.txt文件中读取测试数据。文件里面保存m(1-100)行 n(1-100)列的整数(0...

2018-09-19 17:58:30 1247

原创 回文字符分割

题目最美字符串题目描述字符串有很多格式,我们定义最美字符串为:能够对称的比如“CBABC“, 因为字符串本身和它的反转字符串是相同的,也即字符串以中间字符为轴心呈对称展开。现在需要您帮忙提供方案能够将任一字符串经过最少切割次数使得每个子字串都是最美字符串。输入说明程序从当前路径下的data.txt文件中读取测试数据。文件内容只有一行待测字符串(只包含数字和字母,且区分大小写, 字符...

2018-09-18 19:44:05 203

原创 新汉诺塔

题目汉诺塔问题题目描述有三个柱子A,B,C上面随机套了N个大小不一盘子(N &amp;lt;= 31),小号盘子依次罗在大号盘子上面, 现需要将所有的盘子都移到C柱上面,在移动的过程当中:每次只能将一个柱子最上面的盘子放到其它柱子的最上面且任何时刻不能将大号的盘子压在小号的盘子上面。输入说明以命令行参数的形式输入盘子的初始状态,以及移动步数S(S &amp;lt;= 2^31 - 1)。在程序中可...

2018-09-18 18:55:04 725

原创 最长无重复字符子串

题目有奖征名 题目描述 MTK 内部每款芯片都会有一个名字,比如 Oppo R15 中采用的 AI 芯片 HelioP60。现在公司即将量产一块芯片,为此在内部举办了征名比赛,命名的规则要求简洁,请你找出员工提交的命名中不包含重复字符的最长子串作为最后的候选结果,如果存在多个符合条件的子串,则输出第一个符合条件的子串。 例如输入一个字符串为:helioP60isisGood ,该字符串中满...

2018-09-13 18:07:30 149

原创 拆弹专家(密码BFS)

题目拆弹专家 题目描述 外星人在地球内核种植了一颗反物质炸弹,但是把一个带密码的遥控器遗留在了地球上。 人类密码学家很快破解了该密码,但是时间不多,需要最快的时间解除该密码并解除炸弹。 程序员又来拯救世界了! 该密码由4位1~9的数字组成。 每步你可以对任意一位数上拨或下拨。(9上拨变成1, 1上拨变成2,9下拨变成8); 把相邻的两个数字交换位置(注意,最左边的数字...

2018-09-13 16:55:01 1100

原创 序列划分(正)

题目总工程师 题目描述 有M个软件工程师正在完成一个大型软件,需要开发若干个组件。 已知完成每个组件的开发时间保存在一个数组A里面,每个工程师只能独立完成连续的组件, 并且所有的工程师都是并行工作, 请输出完成这个软件需要的最少时间输入说明 程序从当前路径下的data.txt文件中读取测试数据。 第一行会有1个数值,表示M 第二行则是A数组,元素之间以空格隔开输出说明 向...

2018-09-12 19:06:19 778

原创 最大序列和

题目最大序列和 给出一个整数序列S,其中有N个数,定义其中一个非空连续子序列T中所有数的和为T的“序列和”。对于S的所有非空连续子序列T,求和最大的子序列。以上说明中:N 为正整数,N≤1000000,结果序列和在范围(-2^63,2^63-1)以内。【输入说明】在程序当前路径下存在文件input.data,程序从input.data中读取输入数据。input.data为单行...

2018-09-12 16:11:10 251

空空如也

空空如也

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

TA关注的人

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