自定义博客皮肤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抽出与程序主要目的“不相关的子问题”;2使代码一次只做一次事情;3先用自然语言描述代码,然后根据这个描述帮助你找到更整洁的解决方案抽取不相关的子问题(积极发现并抽取不相关的子逻辑)即把一般代码和专有的项目代码分开,比如一些纯工具类的代码,多用途性的代码以及通用性的代码,同时得简化已有的接口(如果已有的接口不整洁,可以创建自己的整洁的函数来包装它),但也不能抽取太细化(如果...

2018-02-25 12:48:47 182

原创 mysql 相关知识点整理

mysql 相关知识点数据库的三个范式数据库ACID的特性数据库事务的隔离级别mysql锁分类按读写按粒度行锁行锁兼容矩阵行锁之间的兼容关系数据库的三个范式列的原子性 (即列不能够再分成其他几列)在第一个范式的基础上,表必须有主键,没有包含主键的列必须完全依赖于主键,不能只依赖主键的一部分在第二个范式的基础之上,非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在:非主键列 A 依赖于非主键列 B,非主键列 B 依赖于主键的情况。详细讲解见链接数据库ACID的特性原子性(Atomic

2021-04-27 18:54:12 124

原创 并查集——找祖宗和认祖宗的数据结构

leetCode实战(一)sqrt(x)题目描述题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842…,&nbs...

2019-06-07 23:26:56 552 1

原创 如何判断链表有环?

题目描述:如果有一个单向链表,链表当中有可能出现"环",就像下图这样,如何判断这个链表是有环链表?方案一:暴力法从头节点,依次遍历单链表的每一个节点,每到一个新的节点就头节点重新遍历之前的所有的节点,对比此时的节点,如果相同,证明该节点遍历过两次,以此说明链表是有环的伪代码:Node p = head.nextwhile(p.next!==null){ Node...

2019-04-03 00:31:30 324

原创 skipList java 实现

class SkipList<T> { public static void main(String[] var0){ } private static class SkipListNode<T>{ T val; SkipListNode<T> next,down; double so...

2019-02-15 00:34:38 243

原创 动态规划专题----入门(一)---个人心得

什么是动态规划dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems                                                                   ...

2019-01-11 00:44:41 170

原创 算法的实战(二十):LeetCode --max-increase-to-keep-city-skyline

一 题目描述在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。建筑物高度可以增加的最大总...

2018-10-31 00:17:59 171

原创 算法的实战(十九):LeetCode --removeNthFromEnd

一 题目描述给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?二 解题思路1.由于只能一次遍历,且题目给的...

2018-10-29 23:19:01 114

原创 算法的实战(十八):LeetCode --add-binary

一 题目描述给定两个二进制字符串,返回他们的和(用二进制表示)。输入为非空字符串且只包含数字 1 和 0。示例 1:输入: a = "11", b = "1"输出: "100"示例 2:输入: a = "1010", b = "1011"输出: "10101"二 解题思路首先,由于两个string的长度不一致,这样导致我们很难从尾部遍历两个strin

2018-10-09 00:15:48 123

原创 算法的实战(十七):LeetCode --plus-one

一 题目描述给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储一个数字。你可以假设除了整数 0 之外,这个整数不会以零开头。示例 1:输入: [1,2,3]输出: [1,2,4]解释: 输入数组表示数字 123。示例 2:输入: [4,3,2,1]输出: [4,3,2,2]解释: 输入数组表...

2018-10-08 23:12:34 150

原创 算法的实战(十六):LeetCode -- length-of-last-word

一 题目描述给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。说明:一个单词是指由字母组成,但不包含任何空格的字符串。示例:输入: "Hello World"输出: 5二 解题思路1.先判断str是否为空或者null,若是,返回02.调用String.split进行对“ ”进行分割,得到数组,如果得...

2018-10-07 12:17:05 112

原创 算法的实战(十五):LeetCode --pow(x,n)

一 题目描述实现 pow(x, n) ,即计算 x 的 n 次幂函数。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25说明:-100.0 < x...

2018-10-07 02:45:42 86

原创 算法的实战(十四):LeetCode --longest-common-prefix

一 题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说

2018-10-07 02:16:08 125

原创 算法的实战(十三):LeetCode -- Search Insert Position

一 题目描述给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,...

2018-10-07 01:14:02 92

原创 算法的实战(十二):LeetCode -- Implement strStr()

一 题目描述实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回  -1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa...

2018-10-06 23:31:39 96

原创 算法的实战(十一):LeetCode -- Remove Element

一 题目描述给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 ...

2018-10-06 00:06:28 120

原创 算法的实战(十):LeetCode -- Remove Duplicates from Sorted Array

一 题目描述给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素...

2018-10-05 23:31:38 79

原创 算法的实战(九):LeetCode -- 4Sum

一 题目描述给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足...

2018-10-05 22:57:49 147

原创 算法的实战(八):LeetCode -- threeSum Closest

一 题目描述给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).二 解题思路 这道...

2018-10-05 15:24:29 293

原创 算法的实战(七):LeetCode -- threeSum

一 题目描述  给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]...

2018-10-05 14:48:31 155

原创 算法的实战(六):LeetCode -- Integer to Roman

 一 题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II...

2018-10-02 01:19:09 87

原创 算法的实战(五):LeetCode -- Roman to Integer

一 题目描述罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即...

2018-10-01 19:23:16 85

原创 算法的实战(四):LeetCode -- Palindrome Number

一 题目描述判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因...

2018-10-01 17:41:07 103

原创 算法的实战(三):LeetCode -- reverse

一 题目描述给定一个 32 位有符号整数,将整数中的数字进行反转。示例 1:输入: 123输出: 321 示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231,  231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。 二 解...

2018-10-01 11:59:00 132

原创 算法的实战(二):LeetCode -- twoSum

一 题目描述 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] 二 解题思路1. 构建一个hashMap,将targe...

2018-09-28 02:27:42 93

原创 算法的实战(一):LeetCode -- sqrt(x)

一 题目描述实现 int sqrt(int x) 函数。计算并返回 x 的平方根,其中 x 是非负整数。由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。示例 1:输入: 4输出: 2示例 2:输入: 8输出: 2说明: 8 的平方根是 2.82842...,   由于返回类型是整数,小数部分将被舍去。二 解题思路二分法查找法,找到...

2018-09-27 00:35:01 154

原创 深入计算机系统的原理(二)---程序的结构以及执行

信息的表示与处理,其有最重要的三种的数字表示:无符号编码(是基于传统的二进制的表示方法,表示大于或者等于零的数字)补码编码(是表示有符号整数最常见的一种方式,可正可负的数字)浮点编码(是表示实数的科学计数法以二进制为基版)虚拟存储器(机器指令将存储器看成一个非常大的字节数组)地址(每一个字节都有一个唯一的数字标识)虚拟地址空间(所有可能的地址的集合)小端法(从最低有效字节到最高有效字节的顺序来存储...

2018-04-26 22:53:44 150

原创 深入理解计算机系统(一)-------计算机系统的漫游

计算机系统是由硬件和系统软件组成,它们共同工作来运行应用程序源程序实际上就是一个由值0和1组成的位(bit)序列,8个位被组成一组,称为字节关键思想:系统中所有的信息(包括磁盘文件,存储器中的程序,存储中存放的用户数据以及网络上传送的数据)都是由一串位表示,而区别数据对象的唯一方法是我们读到这些数据对象时的上下文从源文件到可执行目标文件的转化是由编译器驱动程序完成的,这个翻译过程分为四个阶段(预处...

2018-04-24 16:09:36 106

原创 编写可读代码的艺术(七)测试的可读性

测试应当具有可读性,以便其他人可以舒服地改变和增加测试1、应对使用者隐去不重要的细节,使重要的细节凸显出来2、让错误信息更有可读性(通过人工定制或者更好assert版本选择)3、选择好的测试输入(选择最简单的测试输入,能完整覆盖被测试代码)4、为测试函数命名(明确描述所需测的功能)...

2018-02-25 13:04:16 248

原创 编程可读代码的艺术(五)循环与逻辑

当对代码表面层次进行改进,就可以往深入讨论程序的循环和逻辑(控制流,逻辑表达式以及相对应的变量)把控制流变得易读的关键思想是将条件,循环以及其他控制流改的越‘自然’越好,使读者不用停下来重读代码条件语句的参数顺序的指导时左侧一般更倾向于不断变化的,右侧一般更倾向于常量if/else语句块的顺序可以提供三种选择:1应首先处理正逻辑而不是负逻辑;2先处理简单的情况;3先处理有趣或者可疑的情况;且使用方...

2018-02-24 23:20:29 203

原创 编写可读代码的艺术(四)注释的“艺术性”

注释的关键思想是为了尽量帮助读者了解得跟作者一样多那什么时候用到注释,什么时候不用到注释呢?答案其实很简单,只要能从代码本身迅速推断出事实就没必要写注释,或者遇到不好的名字时而为它写注释,而是想方设法更好这个名字,即好代码>坏代码+好注释,这是不需要注释的场景当有段代码写成这样而不是那样的时候,需要一种注释其中的缘由(即指导性批注)遇到代码有缺陷时也应该加上TODO或者XXXX这类的标志定义...

2018-02-23 22:40:04 194

原创 编写可读代码的艺术(三)不要起误解的名字以及代码上的‘审美’

当我们将信息装进名字里,不免会导致一个问题的出现-那是该名字是否让其他人产生歧义或者误解,所以我们应该主动发现所谓的误解点并修正更改例如避免使用filter(不知道是挑选(可以使用choose)还是过滤(screen_out))和clip(不知道是从尾部还是哪里剪切掉)等二义词当用到极限或者边缘性范围的,不要使用limit这样的歧义词,推荐使用min/max(【包含】极限),first/last(...

2018-02-23 22:12:40 119

转载 编译型语言、解释型语言、静态类型语言、动态类型语言的概念

编译型语言和解释型语言1、编译型语言需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。优点:编译器一般会有预编译的过程对代码进行优化。因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高。

2018-01-23 18:35:26 148

原创 编写可读代码艺术(2)-表面层次的改进

表面层次的改进可以从选择好的名字,写好的注释以及把代码整洁地写成更好的格式三方面去入手关键思想----把信息装到名字里结论:选择专业的词,避免空洞的词,比如get,size等这类词,找到更有表现力的词----清晰和精确比装可爱好避免像tmp和retval这样泛泛的名字,好的名字应当描述变量的目的或者它所承载的值,如果有使用泛泛的名字,必须有很好的理由用具体的名字代替抽象的名字为

2018-01-23 17:36:56 113

原创 编程可读代码艺术(1)-代码应当易于理解

可读性的度量比其他任何的度量都要重要-----可读性基本定理关键思想---代码的写法应当使别人理解它所需的时间最小化,即理解代码的时间最小化结论:并非代码的行数越少越好,有时候把理解代码所需的时间的最小化是一个更好的目标理解代码所需的时间根本不会与其他目标(如:代码更有效率,好的架构,容易测试等)互相影响且代码的易理解度往往会把代码引向好的架构且容易测试将其他人是否易理解自己所

2018-01-22 18:32:10 164

空空如也

空空如也

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

TA关注的人

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