- 博客(55)
- 收藏
- 关注
原创 【Leetcode--14】最长公共前缀
【Leetcode–14】最长公共前缀【题目】编写一个函数来查找字符串数组中最长公共前缀。如果不存在公共前缀,返回空字符串""示例1:输入:["flower","flow","flight"]输出:"fl"示例2:输入:["dog","racecar","car"]输出:""解释:输入不存在公共前缀说明:所有输入只包含小写字母a-z【思路】当字符串数组长度为0时,公...
2019-11-20 22:21:02 182
原创 深入了解Java枚举类
文章目录深入理解枚举类简介枚举的好处枚举的典型应用使用规范枚举的本质枚举类的声明枚举的方法枚举的特性基本特性枚举可以添加方法枚举可以添加普通方法、静态方法、抽象方法、构造方法枚举可以实现接口枚举的应用组织常量状态机错误码组织枚举枚举工具类EnumSetEnumMap参考资料深入理解枚举类简介enum 全称是 enumeration,是 JDK1.5 引入的新特性,位于Java.lang 包下...
2019-11-19 22:29:54 254
原创 Fastjson 常用API
什么是fastjsonfastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串发序列化到Java Bean。fastjson优点速度快fastjson相对其他的JSON库的特点是快,从2011年fastjson1.1x发布版本之后,其性能从未被其他Java实现的JSON库超越。使用广泛fast...
2019-10-31 10:52:19 1066
原创 【LeetCode】——相交链表
相交链表【题目】找到两个链表相交的起始点【思路】如果两个链表无环相交,那么从相交节点开始,一直到两个链表终止的这一段,是两个链表共享的。链表1从头节点开始,走到最后一个节点,统计链表1的长度记为len1,同时记录链表1的最后一个节点记为end1链表2从头节点开始,走到最后一个节点,统计链表2的长度记为len2,同时记录链表2的最后一个节点记为end2此时如果cur1 != cur2...
2019-09-28 23:21:56 165
原创 【LeetCode-01】-两数之和
【题目】给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以...
2019-09-27 00:23:20 126
原创 【LeetCode-13】-罗马数字
【LeetCode-13】罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做&n...
2019-09-27 00:21:40 311
原创 回文数
回文数【题目】判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它...
2019-09-27 00:19:43 129
原创 合并两个有序链表
合并两个有序链表【题目】给定两个有序单链表的头节点head1和head2,请合并两个有序链表,合并后的链表依然有序,并返回合并后的头节点例如:0->2->3->7->null1->3->5->7->9->null合并后的链表为:0->1->3->3->5->7->7->9->null...
2019-09-27 00:18:09 109
原创 快速幂
快速幂个人博客:https://sgeekioi.github.io/2019/07/31/fastpower/#more【介绍】顾名思义,快速幂就是快速算底数的n次幂。其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高。【描述】计算a的n次方就是将n个a乘起来an=a×a×a...×a⎵n个aa^n = \underbrace{a \times a \times...
2019-07-31 16:14:44 164
原创 合并两个有序的单链表
合并两个有序的单链表【题目】给定两个有序单链表head1和head2,请合并两个两个有序链表,合并后的链表依然有序,并返回合并后链表的头节点。例如:0->2->3->7->null1->3->5->7->9->null合并后的链表为:0->1->2->3->3->5->7->7->9...
2019-07-27 16:08:41 465
原创 顺时针打印矩阵
顺时针打印矩阵【题目】给定一个矩阵matrix,请按照顺时针的方式打印它。例如:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果为:1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10##【解答】本体上算法没有难度,关键在于设计一种容易理解、代码易于实现的方式。我们...
2019-07-25 23:20:38 224
原创 Java I/O流
文章目录Java I/O流二、 流的分类2.1 InputStream (典型实现:**FileInpugStream**)2.2 Reader (典型实现:**FileReader**)2.3 OutPutStream2.4 Writer三、节点流(或文件流)3.1读取文件3.2 写入文件3.3 注意事项四、处理流4.1 缓冲流(处理流之一)4.2 转换流(处理流之二)4.3 打印流(标准流之三...
2019-07-25 16:18:41 679
原创 Java基础——自增变量
欢迎访问:https://sgeekioi.github.io/2019/07/22/selfadd/#more自增 (++) :将变量的值加 1前缀式:如 ++i。前缀式是先加1再使用。后缀式:如 i++。后缀式是先使用再加1。自减 (–) : 将变量的值减 1前缀式:如 --i。前缀式是先减1再使用。后缀式:如 i–。后缀式是先使用再减1。例题下面我们来看一个例题,如果...
2019-07-22 13:47:46 1157
原创 codingInterview 递归 —跳台阶
文章目录跳台阶【标签】【题目】【分析】【解答】方法一 O(2^N^)方法二 O(N)跳台阶【标签】递归【题目】一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)【分析】如果台阶只有1级,方法只有一种。如果台阶有2级,方法有两种。如果台阶有N级,最后跳上第N级的情况,要么是从N-2级台阶直接跳2级台阶,要么是从N-1...
2019-07-15 23:02:45 520
原创 Redis入门 五 有序集合类型
3.6 有序集合类型3.6.1 介绍在集合类型的基础上有序集合类型为几何中的每个元素都关联了一个分数,这使得我们不仅可以完成插入,删除和判断元素是否存在等集合类型支持的操作,还能够获得分数最高(或最低)的前N个元素、获得指定分数范围内的元素等与分数有关的操作。有序集合类型在某些方面和类型列表类型有些相似。二者都是有序的二者都可以获得某一范围的元素区别列表类型是通过链表实现的,获...
2019-05-14 21:01:04 409
原创 Redis 入门 四 集合类型
3.5 集合类型3.5.1 介绍集合类型的常用操作是向集合中加入或删除元素,判断某个元素是否存在等,由于集合类型再Redis内部是使用值为空的散列表实现的,所以这些操作的时间复杂度都是O(1).3.5.2 命令增加/删除元素SADD key member [member …]SREM key member [member …]SADD命令用来向集合中增加一个或多个元素,如...
2019-05-14 21:00:11 415
原创 Reidis 入门 三 列表类型
3.4列表类型3.4.1 介绍列表类型(list)可以存储一个有序的字符串列表,常用的操作是向列表两端添加元素,或者获得列表的某一个片段。列表类型内部是使用双向链表实现的,所以向列表两端添加元素的时间复杂度O(1).借助列表类型,Redis还可以作为队列使用。3.4.2 命令向列表两端添加元素LPUSH key value [value …]RPUSH keyy valu...
2019-05-14 20:59:14 830
原创 Redis入门 二 散列类型
3.3 散列类型3.3.1 介绍我们知道Redis是采用字典结构以键值对的形式存储数据的,而散列类型(hash)的键值也是一种字典结构,其存储了字段(field)和字段值的映射,但字段值只能是字符串,不支持其他数据类型。一个散列类型键可以包含最多232-1个字段散列类型适合存储对象:使用对象类别和ID构成键名,使用字段表示对象的属性,而字段值则存储属性值。3.3.2 命令1.赋值与取值...
2019-05-14 20:58:26 437
原创 Redis入门 一
1. 入门获得符合股则的键名列表KEYS patternpattern支持glob风格通配符格式,具体规则如下符号含义?匹配一个字符*匹配任意个(包括0个)字符[]匹配括号间的任一字符,可以使用“-”符号表示一个范围,a[b-d]可以匹配“ab”、“ac”、“ad”\x匹配字符x,用于转义符号。如果匹配“?”就需要使用?判断一个...
2019-05-14 20:57:31 366
原创 codingInterview 链表—删除链表的中间节点
文章目录删除链表的中间节点【题目】【解答】删除链表的中间节点【题目】给定链表的头节点head,实现删除链表的中间节点的函数。例如:不删除任何节点;1->2,删除节点1;1->2->3,删除节点2;1->2->3->4,删除节点2;1->2->3->4->5,删除节点3;进阶:给定链表的头节点head、整数a和b,实现...
2019-04-30 17:46:32 532
原创 codingInterview 链表—在单链表和双链表中删除倒数第K个节点
文章目录在单链表和双链表中删除倒数第K个节点【题目】【要求】【解答】在单链表和双链表中删除倒数第K个节点【题目】分别实现两个函数,一个可以删除单链表中倒数第k个节点,另一个可以删除双链表中倒数第k个节点。【要求】如果链表长度为N,时间复杂度O(N),额外空间复杂度达到O(1)。【解答】先来看看单链表如何调整。如果链表为空或者k值小于1,在这种情况下,参数是无效的,直接返回即可。除此之...
2019-04-25 21:10:56 424
原创 codingInterview 链表—打印两个有序链表的公共部分
文章目录打印两个有序链表的公共部分【题目】打印两个有序链表的公共部分【题目】给定两个有序链表的头指针head1和head2,打印两个链表的公共部分。##【解答】因为时有序链表,所以从两个链表的头开始进行如下判断:如果head1的值小于head2,则head1往下移动。如果head2的值小于head1,则head2往下移动。如果head1的值等于head2的值,则打印这个值,然后h...
2019-04-24 22:51:49 384
原创 codingInterview 用栈来求解汉诺塔问题
文章目录用栈来求解汉诺塔问题【题目】【要求】【解答】方法一:递归的方法方法二:非递归的方法——用栈来模拟整个过程。用栈来求解汉诺塔问题【题目】汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从左侧的塔直接移动到右侧,也不能从最右侧直接移动到最左侧,而是必须经过中间。求当塔又N层的时候,打印最优移动过程和最有移动总步数。例如,当塔数为两层时,最上层的塔记为1,最下层的塔记为2,则打印:...
2019-04-22 20:16:30 433
原创 codingInterview 用一个栈实现另一个栈的排序
文章目录用一个栈实现另一个栈的排序【题目】【解答】用一个栈实现另一个栈的排序【题目】一个栈中元素的类型为整型,现在想将该栈从顶到底按从大到小的顺序排序,只许申请一个栈。除此之外,可以申请新的变量,但不能申请额外的数据结构。如何完成排序?【解答】想要排序的栈记为stack,申请的辅助栈记为help。在stack上执行pop操作,弹出的元素记为cur。如果cur小于或等于help的栈顶元...
2019-04-18 20:43:31 389
原创 codingInterview 猫狗队列
文章目录猫狗队列【题目】【解答】猫狗队列【题目】宠物、猫和狗的类如下public class Pet { private String type; public Pet(String type){ this.type = type; } public String getPetType(){ return this.ty...
2019-04-18 20:42:15 417
原创 Java并发编程实战 一
第一部分 基础知识"共享"意味着变量可以由多个线程同时访问,而"可变"则意味着变量的值在其声明周期内可以发生变化。一个对象是否需要线程安全,取决于他是否被多个线程访问。当多个线程访问某个状态变量并且其中一个线程写入操作时,必须采用同步机制来协同这些线程对变量的访问。java中主要的同步机制关键字synchronized他提供了一种独占的加锁方式,但"同步这个术语"还包括volatile类型的...
2019-04-18 17:43:45 1133
原创 如何仅用递归函数和栈操作逆序一个栈
文章目录如何仅用递归函数和栈操作逆序一个栈【题目】【解答】如何仅用递归函数和栈操作逆序一个栈【题目】一个栈依次压入1、2、3、4、5,那么从栈顶到栈底分别为5、4、3、2、1.将这个栈转置后,从栈顶到栈底为1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能使用其他数据结构。【解答】我们设计两个递归函数递归函数一:将栈stack的栈底元素返回并移除 pub...
2019-04-09 20:09:07 374
原创 设计一个有getMin功能的栈
文章目录设计一个有getMin功能的栈【题目】【要求】【解答】第一种设计方案第二种设计方案【点评】设计一个有getMin功能的栈【题目】实现一个特殊的栈,在实现栈的基本功能的基础上,在实现返回栈中最小元素的操作【要求】pop、push、getMin操作的时间复杂度都是O(1).设计的站的类型可以使用现成的栈结构。【解答】在设计时,我们使用两个栈,一个栈用来保存当前栈中的元素,其...
2019-04-09 10:54:52 416
原创 HashMap 源码分析二 resize()
resize()方法:初始化或扩容方法。如果为null,会根据设置的阈值对目标进行分配。否则对容量进行扩容。resize()是非常耗时的,在编写过程中尽量避免。final Node<K,V>[] resize() { Node<K,V>[] oldTab = table; int oldCap = (oldTab == null) ? 0...
2019-04-05 17:05:03 396
原创 HashMap源码分析 一
文章目录HashMap简介底层数据结构分析类的属性Node节点类树节点HashMap源码分析put方法putValHashMap简介基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 此实现假...
2019-04-05 15:59:08 580
原创 数据结构 栈(一)数组实现
文章目录栈(Stack)栈的类型定义数组实现栈(Stack)栈是限定仅在表尾进行插入或者删除操作的线性表。栈又称作后进先出(Last In First Out,LIFO)的线性表。在生活中有很多例子。例如,放在桌子上的一摞纸,每次使用时从上往下依次取用。栈的类型定义 public interface Stack<E> { int getSize(); ...
2019-03-31 22:28:10 433
原创 java 实现动态数组
自己动手实现一个动态数组Array类。并添加一些常用的方法。package Array;public class Array<E> { private E[] data; private int size; /** * 构造函数,传入数组的容量capacity构造Array * * @param capacity ...
2019-03-31 08:45:18 681
原创 排序(二)-插入排序
简介在生活中我们玩扑克牌时,当我们每拿到一张新的牌,会将他按照大小插入到对应的位置。为了找到这个对应的位置,我们通常将它与手中已经排好序的牌从到左进行比较。直到找到对应的位置。这就是插入排序的基本思想。代码public class Code_01_InsertionSort { public static void insertionSort(int[] arr) { ...
2019-03-28 16:53:37 130
原创 排序(一)-选择排序
原理:首先,找到数组中最小的元素,将他与数组中第一个元素交换。然后在剩下的元素中找到最小的元素,将他与数组的第二个元素交换。依次重复此操作,知道将整个数组排序。总的来说,选择排序是一种很容易理解和实现的简单算法代码:/*首先在未排序的数组中寻找最小元素,找到后与第一位进行交换,然后再剩下的序列中继续寻找最小的元素,找到后与第二位进行交换。时间复杂度 O(n^2)*/publi...
2019-03-28 11:29:23 498
原创 LinkedList类常用方法Demo
LinkedList类常用方法测试package list;import java.util.Iterator;import java.util.LinkedList;public class LinkedListDemo { public static void main(String[] srgs) { //创建存放int类型的linkedList ...
2019-03-26 22:15:48 344
原创 Java集合—LinkedList源码分析
文章目录简介结构分析源码分析构造方法方法根据位置取数据根据对象得到索引**检查链表是否包含某元素的方法:****删除方法**简介LinkedList实现了List和Deque接口。 实现所有可选列表操作,并允许所有元素(包括null )。LinkedList底层使用的双向链表结构使插入和删除操作更加高效。注意,LinkedList是线程不安全的。如果多个线程同时访问链接列表,并且至少有一个线程...
2019-03-26 22:14:41 341
原创 【leetcode】删除排序数组中重复的数字
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 ...
2019-03-25 10:25:31 424
原创 ArrayList源码分析
ArrayList核心源码上面是核心源码的分析ArrayList简介ArrayList源码分析两者的联系与区别ArrayList核心扩容技术[## ArrayList常用操作](## ArrayList常用操作)ArrayList简介ArrayList的底层是数组队列,相当于动态数组。在添加大量元素前,应用程序可以使用ensureCapacity 操作来增加 ArrayLis...
2019-03-24 21:33:08 288
原创 ArrayList核心源码
package java.util;import java.util.function.Consumer;import java.util.function.Predicate;import java.util.function.UnaryOperator;public class ArrayList<E> extends AbstractList<E>...
2019-03-24 21:08:39 105
原创 【leetcode】验证回文串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。说明:本题中,我们将空字符串定义为有效的回文串。示例 1:输入: "A man, a plan, a canal: Panama"输出: true示例 2:输入: "race a car"输出: falseclass Solution { public boolean isPalindrom...
2019-03-20 22:00:32 117
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人