
java
文章平均质量分 82
SquareSquareHe
Trying to be better
展开
-
【力扣算法】1-两数之和
题目给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = \[2, 7, 11, 15], target = 9因为 nums\[0] + nums\[1] = 2 + 7 = 9所以返回 \[0, 1]题解...原创 2019-04-11 11:20:53 · 942 阅读 · 0 评论 -
【力扣算法】2-两数相加
题目给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -&g...原创 2019-04-11 11:23:02 · 463 阅读 · 0 评论 -
【笔记】《算法设计与分析(第三版)》王晓东著-第2章-递归和分治策略
第二章 递归与分治策略2.1 递归的概念Ackerman函数并非一切递归函数都能用非递归方式定义。为了对递归函数的复杂性有更多的了解,介绍一个双递归函数——Ackerman函数。当一个函数以及它的一个变量是由函数自身定义时,称这个函数是双递归函数。Ackerman函数A(n,m)有两个独立的整变量m>=0和n>=0,其定义如下:A(1,0)=2A(0,m)=1 m>...原创 2019-04-11 11:26:21 · 1188 阅读 · 0 评论 -
【笔记】《算法设计与分析(第三版)》-王晓东著-第3章-动态规划
第三章 动态规划动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是互相独立的。若用分治法解这些问题,则分解得到的子问题数目太多,以至于最后解决原问题需要耗费指数时间。然而,不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许...原创 2019-04-11 11:27:33 · 2650 阅读 · 0 评论 -
【力扣算法】5-最长回文子串
题目给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"题解摘要这篇文章是为中级读者而写的。它介绍了回文,动态规划以及字符串处理。请确保你理解什么是回文。回文是一个正读和反读都相同的字符串,例如,“aba...原创 2019-04-15 18:49:59 · 466 阅读 · 0 评论 -
【力扣算法】6-Z字形变换
题目将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数...原创 2019-04-15 19:17:08 · 486 阅读 · 0 评论 -
【力扣算法】7-整数反转
题目给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。题解解决方案方...原创 2019-04-15 19:18:16 · 448 阅读 · 0 评论 -
【力扣算法】8-字符串转换整数(atoi)
题目请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...原创 2019-04-15 21:16:26 · 410 阅读 · 0 评论 -
【力扣算法】11-盛最多水的容器
题目给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。**说明:**你不能倾斜容器,且 n 的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳...原创 2019-04-20 21:44:49 · 503 阅读 · 0 评论 -
【力扣算法】12-整数转罗马数字
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 ...原创 2019-04-20 21:46:08 · 557 阅读 · 0 评论 -
【力扣算法】13-罗马数字转整数
题目罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 ...原创 2019-04-20 21:47:10 · 518 阅读 · 0 评论 -
【力扣算法】14-最长公共前缀
题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。题解解决方案方法一:水平扫描法思路首先,我...原创 2019-04-20 21:48:13 · 688 阅读 · 0 评论 -
【力扣算法】15-三数之和
题目给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 *a,b,c ,*使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。**注意:**答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]题解无...原创 2019-04-20 21:49:39 · 1077 阅读 · 0 评论 -
【力扣算法】131-分割回文串
题目给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。返回 s 所有可能的分割方案。示例:输入: "aab"输出:[ ["aa","b"], ["a","a","b"]]题解暂无官方题解看到之后,感觉暴力法还是很容易想到的:递归找回文串,然后找到最后就完事了,把一个符合要求的含有String的List压入最后返回的List,然后依次类推回溯找到所有的S...原创 2019-04-20 21:50:44 · 1302 阅读 · 0 评论 -
【力扣算法】146-LRU缓存机制
题目运用你所掌握的数据结构,设计和实现一个 LRU (最近最少使用) 缓存机制。它应该支持以下操作: 获取数据 get 和 写入数据 put 。获取数据 get(key) - 如果密钥 (key) 存在于缓存中,则获取密钥的值(总是正数),否则返回 -1。写入数据 put(key, value) - 如果密钥不存在,则写入其数据值。当缓存容量达到上限时,它应该在写入新数据之前删除最近最少使...原创 2019-04-20 21:51:55 · 1614 阅读 · 0 评论 -
【笔记】《java编程思想(第四版)》第7章-复用类
第7章 复用类复用代码是Java众多引人注目的功能之一。但想要成为极具革命性的语言,仅仅能够复制代码并对之加以改变是不够的,它还必须能够做更多的事情。组合:只在新的类中产生现有类的对象。继承:按照现有类的类型来创建新类。7.1 组合语法toString()很特殊。每一个非基本类型的对象都有一个toString()方法,而且当编译器需要一个String而你却只有一个对象时,该方法便会被调用...原创 2019-04-20 21:54:35 · 1006 阅读 · 0 评论 -
【力扣算法】232-用栈实现队列
题目使用栈实现队列的下列操作:push(x) – 将一个元素放入队列的尾部。pop() – 从队列首部移除元素。peek() – 返回队列首部的元素。empty() – 返回队列是否为空。示例:MyQueue queue = new MyQueue();queue.push(1);queue.push(2); queue.peek(); // 返回 1queue.p...原创 2019-04-21 09:06:19 · 336 阅读 · 0 评论 -
【力扣算法】16-最接近的三数之和
题目给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).题解无官方题解执行用时 : 12...原创 2019-04-25 20:43:22 · 390 阅读 · 0 评论 -
【力扣算法】17-电话号码的字母组合
题目给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。示例:输入:"23"输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].说明:尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。题解无官方题解先用暴力法做了...原创 2019-04-25 20:45:07 · 544 阅读 · 3 评论 -
【力扣算法】3-无重复字符的最大子串
题目给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "...原创 2019-04-14 08:02:30 · 442 阅读 · 0 评论 -
【力扣算法】4-寻找两个有序数组的中位数
题目给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。你可以假设 nums1 和 nums2 不会同时为空。示例 1:nums1 = [1, 3]nums2 = [2]则中位数是 2.0示例 2:nums1 = [1, 2]nums2 = [3, 4]则中位数是 (...原创 2019-04-14 08:20:30 · 541 阅读 · 0 评论 -
【力扣算法】18-四数之和
题目给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a, b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出所有满足条件且不重复的四元组。注意:答案中不可以包含重复的四元组。示例:给定数组 nums = [1, 0, -1, 0, -2, 2],和 target = 0。满足要求的四元组集合为...原创 2019-04-25 21:37:09 · 612 阅读 · 0 评论 -
【力扣算法】19-删除链表的倒数第N个节点
题目给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n 保证是有效的。进阶:你能尝试使用一趟扫描实现吗?题解摘要本文适用于初学者。它介绍了以下内容: 链表的遍历和删除其末尾的...原创 2019-04-25 22:03:13 · 1195 阅读 · 0 评论 -
【笔记】《Java核心技术(第九版)》卷1-第1章-Java程序设计概述
第1章 Java程序设计概述1.1 Java程序设计平台1.2 Java“白皮书”的关键术语简单性 2)面向对象 3)网络技能(Network-Savvy) 4)健壮性 5)安全性 6)体系结构中立 7)可移植性 8)解释型 9)高性能 10)多线程 11)动态性1.2.1 简单性Java语法是C++语法的一个“纯净版本”。这里没有头文件、指针运算(甚至指针语法)、结构、联合、操作符...原创 2019-04-17 13:20:40 · 318 阅读 · 0 评论 -
【笔记】《Java核心技术(第九版)》卷1-第2章-Java程序设计环境
第2章 Java程序设计环境2.1 安装Java开发工具箱2.1.1 下载JDKJava术语术语名缩写解释Java Development KitJDK编写Java程序的程序员使用的软件Java Runtime EnvironmentJRE运行Java程序的用户使用的软件Standard EditionSE用于桌面或简单的服务器应用的Java平...原创 2019-04-17 13:22:01 · 260 阅读 · 0 评论 -
【习题】《算法设计与分析(第三版)》-王晓东著-第1章-算法引论
第一章 算法引论 习题1-1 说明下面方法swap为什么无法交换实际参数的值。答:java基本数据类型传值,方法不会改变实参的值。书中原文为——java中所有方法的参数均为值参数。在调用方法时先将实际参数的值复制到形式参数中,然后再执行调用。因此,在执行调用后,实际参数的值不变。(思考:所以要用javabean?如果要实现swap,必须引入getter&setter?)1-2 ...原创 2019-04-14 20:14:59 · 10039 阅读 · 0 评论 -
【笔记】《Effective Java(第2版)》第1章-引言
第1章 引言Java5的新特性:泛型、枚举、注解、foreach循环、自动装箱、varargs、静态导入、java.util.concurrent清晰性和简洁性 模块(Module)指任何可重用的软件组件类、接口、构造器、成员以及序列化形式被统称为API元素...原创 2019-04-26 18:36:37 · 137 阅读 · 0 评论 -
【笔记】《Java编程思想(第四版)》第14章-类型信息
第14章 类型信息RTTI(Run-Time Type Identification)运行阶段类型识别运行时类型信息使得你可以在程序运行时发现和适用类型信息。一种是“传统的”RTTI;另一种是“反射”机制14.1 为什么需要RTTI如果能够知道某个泛化引用的确切类型,就可以使用最简单的方式去解决它。使用RTTI,可以查询某个Shape引用所指的对象的确切类型,然后选择或者剔除特例。14...原创 2019-04-26 18:37:32 · 288 阅读 · 0 评论 -
【笔记】《设计模式:可复用面向对象软件基础》第1章-引言
第1章 引言设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须找到相关对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关系。你的设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。内行的设计者知道:不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解决方案。具有统一格式的、已分类编目的若干组设计模式1.1 什么是设计模...原创 2019-04-26 18:38:44 · 553 阅读 · 0 评论 -
【笔记】《Java核心技术(第九版)》卷1-第3章-Java的基本程序设计结构
第3章 Java的基本程序设计结构3.1 一个简单的Java应用程序大小写敏感访问修饰符(access modifier) 第五章介绍第四章介绍Java类。Java应用程序中的全部内容都必须放置在类中。根据Java语言规范,main方法必须声明为publicC++注释:Java中所有函数都属于某个类的方法(标准术语称其为方法,而不是成员函数)。因此Java中的main方法必须有一个外壳...原创 2019-04-17 22:43:01 · 2040 阅读 · 0 评论 -
【力扣算法】20-有效的括号
题目给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例 2:输入: "()[]{}"输出: true示例 3:输入: "(]"输出: false示例 4:...原创 2019-04-26 21:20:07 · 500 阅读 · 0 评论 -
【力扣算法】21-合并两个有序链表
题目将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4题解无官方题解执行用时 : 2 ms, 在Merge Two Sorted Lists的Java提交中击败了98.56% 的用户内存消耗 : 35.8...原创 2019-04-26 21:21:02 · 283 阅读 · 0 评论 -
【力扣算法】22-括号生成
题目给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。例如,给出 n = 3,生成结果为:[ "((()))", "(()())", "(())()", "()(())", "()()()"]题解方法一:暴力法思路我们可以生成所有 22n2^{2n}22n个 '(' 和 ')' 字符构成的序列。然后,我们将检查每一个是否...原创 2019-04-26 21:21:49 · 609 阅读 · 0 评论 -
【笔记】《Java编程思想(第四版)》第9章-接口
第9章 接口接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法。这种机制在编程语言中并不通用。例如C++对这些概念只有间接的支持。在Java 中存在语言关键字这个事实表明人们认为这些思想是很重要的,以至于要提供对它们的直接支持。9.1 抽象类和抽象方法Instrument类的目的是为它的所有导出类创建一个通用接口。不同子类可以用不同方式表示此接口。通用接口建立起一种基本形式,...原创 2019-04-22 22:30:44 · 283 阅读 · 0 评论 -
【笔记】《Java编程思想(第四版)》第10章-内部类
第10章 内部类可以将一个类定义放在另一个类的定义内部,这就是内部类。在最初,内部类看起来就像是一种代码隐藏机制:将类置于其他类的内部。但是,你将会了解到,内部类远不止如此,它了解外围类,并能与之通信;而且你用内部类写出的代码更加优雅而清晰,尽管并不总是这样。10.1 创建内部类创建内部类的方式就如同你想的一样——把类的定义置于外围类的里面。//:innerclasses/Parcel1...原创 2019-04-22 22:36:32 · 471 阅读 · 0 评论 -
【笔记】《Java核心技术(第九版)》卷1-第5章-继承
第5章 继承继承(inheritance)反射(reflection)5.1 类、超类和子类关键字extends表示继承。C++注释:Java与C++定义继承类的方式十分相似。Java用关键字extends代替了C++中的冒号(:)。在Java中,所有的继承都是共有继承,而没有C++中的私有继承和保护继承。关键字extends表明正在构造的新类派生于一个已存在的类。已存在的类称为超类(...原创 2019-04-22 22:37:15 · 342 阅读 · 0 评论 -
【笔记】《Java核心技术(第九版)》卷1-第6章-接口与内部类
第6章 接口与内部类**接口(interface)**技术,这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。一个类可以实现(implement)一个或多个接口。克隆对象(有时称为深拷贝)。对象的克隆是指创建一个新对象,且新对象的状态与原始对象的状态相同。当对克隆的新对象进行修改时,不会影响原始对象的状态。内部类(inner class)代理(proxy),这是一种是实现任意...原创 2019-04-22 22:37:50 · 227 阅读 · 0 评论 -
【力扣算法】23-合并k个排序链表
题目合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。示例:输入:[ 1->4->5, 1->3->4, 2->6]输出: 1->1->2->3->4->4->5->6题解无官方题解一开始想要自己实现一个胜者组最小堆k路归并算法,感觉短时间实现不出胜者组最小堆的细节。于是想...原创 2019-04-27 14:54:02 · 276 阅读 · 0 评论 -
【笔记】《Java核心技术(第十版)》卷1-第11章-事件处理
第11章 事件处理对于图形用户界面的程序来说,事件处理是十分重要的。要想实现用户界面,必须掌握Java 事件处理的基本方法。本章将讲解 Java AWT 事件模型的工作机制, 从中可以看到如何捕获用户界面组件和输入设备产生的事件。另外,本章还介绍如何以更加结构化的方式处理动作(actions) 事件。11.1 事件处理基础程序员对相关的特定事件编写代码, 并将这些代码放置在过程中,通常人们将...原创 2019-05-01 20:26:36 · 1872 阅读 · 1 评论 -
【笔记】《深入理解Java虚拟机(第二版)》-第1章-走近Java
第1章 走近Java1.1 概述“一次编写到处运行” 安全的内存管理和访问机制 热点代码检测和运行时编译及优化 应用程序接口1.2 Java技术体系广义上讲,Clojure、JRuby、Groovy等运行于Java虚拟机上的语言及其相关的程序都属于Java技术体系中的一员。传统意义上来看,Sun官方所定义的Java技术体系包括以下几个组成部分:Java程序设计语言各种硬件平台上的Ja...原创 2019-04-23 13:20:32 · 294 阅读 · 0 评论