自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雨纷飞_263

点滴记录,见证成长!

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

原创 快速排序及优化

快速排序的基本思想:挖坑填数+分治法。一、递归法1、算法描述:快速排序通过分治策略把一个数组一分为二。步骤为:从数组中挑出一个元素,称为"基准"(pivot)。 重新排序数组,所有比基准值小的元素放在基准前面,所有比基准值大的元素放在基准后面。分区结束之后,该基准就处于数组的中间位置。这个称为分区(partition)操作。 递归地把小于基准值元素的子数组和大于基准值元素的子数...

2019-09-20 18:03:41 192

原创 括号匹配

题目描述:给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 注意空字符串可被认为是有效字符串。代码实现一:class Solution { public boolean isValid(String s) { Hash...

2019-09-19 23:33:37 225

原创 复杂链表的复制(java实现)

题目描述:给定一个链表,每个节点包含一个额外增加的随机指针,该指针可以指向链表中的任何节点或空节点。要求返回这个链表的深拷贝。思路一:使用hash存储原结点和复制结点的映射关系,通过映射关系处理复制结点的random。(时间复杂度O(n),空间复杂度O(n))代码实现:class Solution { public Node copyRandomList...

2019-09-19 15:32:14 226

原创 最小栈

题目描述:设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x)-- 将元素 x 推入栈中。 pop()-- 删除栈顶的元素。 top()-- 获取栈顶元素。 getMin() -- 检索栈中的最小元素。思路:利用辅助栈,辅助栈第一次不管数据大小都要放入,从第二次开始只存比上一个存的元素小的值。出栈的时候,只有在数据栈栈顶元素和...

2019-09-19 00:26:41 191

原创 两个队列实现栈

题目描述:使用队列实现栈的下列操作:empty() -- 返回栈是否为空 push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素思想:入栈push():哪个队列为空入哪个,都为空入qu1。最后usedSize++。出栈pop():若qu2不为空,先出usedSize-1个到qu1,此时qu2只剩一个数据,出队列即可。类似的...

2019-09-18 16:00:14 136

原创 删除链表中值为val的所有结点

题目描述:删除链表中等于给定值val的所有节点。思路:从前向后遍历链表,如果当前结点cur的值为val就删除。需要注意几点:如果头结点的值就是val,需要删除,那么头结点要向后移动。 注意判断条件的设置,如果当前结点cur需要删除,就要知道cur的上一个结点,因此条件可以设置为判断cur.next.val == val。图解:代码实现:class Sol...

2019-09-17 22:38:50 336

原创 合并两个有序链表

题目描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。思想:新创建一个头结点,然后遍历两个链表比较每个结点的值大小,将值比较小的结点拼接,直到某个链表全部遍历完。此时还需判断另外一个链表是否遍历完,若没有还需拼接一次。图解:代码实现:class Solution { public ListNode merg...

2019-09-17 21:51:38 109

原创 判断链表是否相交

题目描述:编写一个程序,找到两个单链表相交的起始节点。思路:由于两个链表长度可能不同,所以应先使长链表走n步,这个n可以通过分别遍历链表后求差得到,消除链表长度差后遍历两个链表找相交的起始结点。图解:代码实现:(比较暴力)public class Solution { public ListNode getIntersectionNode(ListNode ...

2019-09-17 19:44:05 178

原创 链表回文结构

题目描述对于一个链表,请设计一个时间复杂度为O(n),额外空间复杂度为O(1)的算法,判断其是否为回文结构。给定一个链表的头指针head,请返回一个bool值,代表其是否为回文结构。思路:由于是单链表,结点没有指向前一个结点的引用,因此需要将后半部分链表反转。 定义两个引用,一个在链表头从前向后走,另一个在链表尾从后向前走。 每走一步判断两个结点的值是否相同,直到两个引...

2019-09-17 17:07:06 214

原创 删除链表中重复的结点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5思路:这个题看似简单,但需要注意的点还是很多。我们可以新创建一个辅助头结点,避免单独讨论头结点。定义两个引用pre 和 cur,当 cur 和 cur.n...

2019-09-17 16:35:15 92

原创 判断链表是否有环、环入口

题目描述:1、给定一个链表,判断链表中是否有环。解法:快慢指针的思想,fast一次走两步,slow一次走一步,如果某一时刻fast与slow相遇,那么肯定有环。代码实现:public class Solution { public boolean hasCycle(ListNode head) { ListNode fast = head; ...

2019-09-17 00:28:24 145

原创 链表分割

题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode*pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。解法:遍历原链表,按照基准将结点放到两个新链表中。最后合并两个链表即可。图解:代码实现:public class Partition { ...

2019-09-16 23:16:35 144

原创 链表中倒数第K个结点

题目描述输入一个链表,输出该链表中倒数第k个结点。解法:重点在于检查传入的参数是否合法。思想:定义两个引用fast和slow,fast先走k-1步,然后fast和slow一块走,当fast.next为空时,slow指向的位置即为倒数第K个结点。图解:代码实现:public class Solution { public ListNode FindKt...

2019-09-16 19:38:17 92

原创 链表的中间结点

题目描述:给定一个带有头结点head的非空单链表,返回链表的中间结点。如果有两个中间结点,则返回第二个中间结点。解法一:思想:遍历计算链表长度length,走length/2即为中间结点:代码实现:class Solution { public ListNode middleNode(ListNode head) { ListNode c...

2019-09-16 17:56:30 108

原创 反转链表

题目描述输入一个链表,反转链表后,输出新链表的表头。思路:反转链表,关键在于如何保存某一个结点的前驱和后继。 因此我们定义三个引用,cur指向当前结点,prev指向cur的前一个结点,curNext指向cur的后一个结点。 保持这种关系不变,直到curNext为空,此时cur所指向的结点,就是反转后链表的新头结点。图解:反转后的链表:代码实现:pub...

2019-09-16 17:18:40 99

原创 用两个栈实现队列

题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。思路:队列“先进先出”,而栈“先进后出”,那么只要把两次进栈、两次出栈看做整体,就是队列。图解:完整代码:public class Solution { Stack<Integer> stack1 = new Stack<Integer>(...

2019-09-13 10:19:20 105

原创 从尾到头打印链表

题目描述:输入一个链表,按链表从尾到头的顺序返回一个ArrayList。解法:思路一:递归法public class Solution { ArrayList list = new ArrayList(); public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {...

2019-09-12 18:16:57 85

原创 替换空格

题目描述:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解法:思路一:使用java自带的函数replace()public class Solution { public String replaceSpace(StringBuffer str) { ...

2019-09-11 18:34:30 135

原创 Java-I/O用法总结

一、File类、1、File类基本使用java,io,File类是普通类,直接实例化对象即可使用。构造方法:public File(String pathname) public File(String parent, String child)判断文件是否存在:public boolean exists()文件创建与删除:创建:public boolean c...

2019-08-30 17:45:54 239

原创 MySQL-数据库事务、内连、外连

一、事务事务就是一组DML(数据操作)语句,这些语句在逻辑上存在相关性,要么全部执行成功,要么全部失败,是一个整体。1、事务的基本操作: 开始一个事务:start transaction 创建一个保存点:savepoint保存点名; 回到保存点:rollback to保存点名。 2、事务操作注意事项: 没有设置保存点,也可以回滚。只能回滚到事务的开始...

2019-08-23 22:47:36 228

原创 MySQL-常见索引及使用

一、认识索引如果没有索引查询数据只能整表扫描,数据量大的时候速度很慢。通过建立索引,能够显著提升数据查询速度,这是索引最大的优点。但建立索引也会降低数据插入、删除、更新的速度,因为执行这些操作都需要维护更新索引。因此,索引适合建立在频繁查询的场景中。二、常见索引类型 主键索引(primary key):最多只有一个(可以是复合主键),值不能为空且不能重复 唯一索引(uniq...

2019-08-22 21:59:51 229

原创 Java-多线程

一、进程与线程进程:是资源分配的最小单位,操作系统中一个程序开始执行就产生一个进程,是动态概念。线程:是程序执行的最小单位,它是进程的一个执行流。一个程序执行多个任务,每个任务就是一个线程。1、进程和线程的区别:线程更加“轻量级”,创建和关闭的开销小。 没有进程就没有线程。 每个进程拥有独立的内存空间,而线程之间共享数据,因此线程间通信比进程之间更加方便。2、线程的状态:...

2019-08-16 15:39:11 94

原创 Java-反射机制

一、反射:1、什么是java反射机制;Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取信息及动态调用对象方法的机制就是反射。2、反射的作用反射机制允许在运行时取得任何一个已知名称的类的内部信息,包括属性、方法等。运用反射可以使编写的代码更加灵活,同时还可以降低代码的耦合度。有利就有弊...

2019-08-13 15:59:15 131

原创 JDK1.8常用新特性

一、接口定义增强(新增默认方法和静态方法)接口(Interface)在开发中广泛应用,如果接口设计不合理,那么接口的所有实现类都会受到影响。因此JDK1.8对接口做了优化,新增了默认方法和静态方法。默认方法:使用default定义,通过对象调用JDK1.8之前接口中的方法只有声明而没有方法体,具体方法在子类中实现。但如果某个方法是通用的,在所有实现类中的实现都是一样的,我们还有必要每个子...

2019-08-10 22:19:04 365

原创 java-泛型详解

一、引言泛型是在JDk1.5引入的一个新特性。在JDK1.5之前,如果要求定义一个类,它的属性既可以是int类型,也可以是double类型,还可以是String类型,那么就只能用Object类型去保存。例如:定义一个坐标类Point。class Point { private Object x; private Object y; public Object ...

2019-08-07 17:20:16 111

原创 java-包的定义和使用

1、什么是包?包的本质就是一个或多个文件夹。包的作用可简单总结为以下三点:一是开发中避免类名重复问题; 二是对代码整理归类,将功能相近的类放到一个包中管理; 三是限定访问权限(default就是包访问权限)。2、包的定义和使用:定义:在java文件的首行使用 “package包名”定义,包名一般是网址倒过来的形式,使用小写字母。package com.java; p...

2019-08-06 21:24:59 1124

原创 Java-Object类与包装类

一、Object类Object类是Java中所有类的父类,其他类都默认继承了Object类,因此其他类的对象都可以使用Object进行接收。1、Object类中的方法:通过源码,我们可以看到 Object类中的方法如下:在这些方法中,比较常用的方法有 clone()、equals()、getClass()、toString()。2、获取对象信息Object类默认提供...

2019-08-05 22:26:01 463

原创 Linux常用命令总结

Linux系统命令非常之多,我这里只是简单总结一下常用的命令。命令基本格式:命令名称 [命令参数] [命令对象]命令参数的长格式与短格式示例:一、常用系统命令 序号 命令 用法 功能 1 echo [字符串 | $变量] echo HelloWorld echo $PATH 在终端输出字符串 ...

2019-08-02 12:56:35 337 1

原创 代理设计模式

一、代理模式:代理模式为其他对象提供一种代理以控制对这个对象的访问。这时,访问对象不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介。代理模式的主要优点有:代理模式作为客户端与目标对象之间的中介,有保护目标对象的作用; 代理对象可以扩展目标对象的功能; 代理模式能将客户端与目标对象分离,在一定程度上降低了系统的耦合度;其主要缺点是:在客户端和目标对象之间增加一个代...

2019-05-04 23:16:49 134

原创 工厂设计模式

一、简单工厂模式专门定义一个类用来创建其它类的实例,被创建的实例通常都具有共同的父类。1、主要包括:一个抽象产品类 若干具体产品类 一个工厂我们来看具体代码:interface Shape{ void draw();}class Square implements Shape{ public void draw() { System.o...

2019-04-28 20:38:23 122

原创 模板方法设计模式

一、模板方法模式(Template Pattern)在模板方法设计模式中,一个抽象类定义了执行的总体流程。它的子类可以根据需要重写方法实现,但调用将以抽象类中定义的方式进行。1、优点:1)封装不变部分,扩展可变部分。 2)提取公共代码,便于维护。 3)行为由父类控制,子类实现。2、缺点:每一个不同的实现都需要一个子类,导致类的个数增加,使得系统更加庞大。3、注意事项:为防止恶意操...

2019-04-26 22:19:18 131

原创 单例模式总结

一、单例模式(Singleton Pattern)单例模式只涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。并且提供了访问其唯一对象的方式,可以直接访问,不需要在外部实例化该类的对象。1、单例模式可总结为以下三点: 1)构造方法使用private私有化(保证外部无法new出实例对象); 2)内部自己创建自己的唯一实例对象; 3)对外部提...

2019-04-25 14:39:49 357

原创 设计模式简介

一、什么是设计模式:设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。使用设计模式是为了实现代码复用、让代码更容易被他人理解,同时保证代码的可靠性。二、设计模式6大原则:1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展...

2019-04-21 17:30:56 192

原创 C语言-实现栈(stack)

1、什么是栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算,这一端被称为栈顶,把另一端称为栈底。向一个栈插入新元素称作压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素称作出栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈的特点就是:先进后出(FILO),或是后进先出(LIFO)。栈的结构...

2019-04-21 10:44:37 4197

原创 C语言-实现单向链表

1、什么是链表:链表是一种在逻辑上连续,物理存储上不一定连续的存储结构。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表的结构,我们可以用下图描述:2、代码实现链表:链表所涉及的基本功能主要有:创建链表、插入结点、求链表的长度、查找、排序、遍历、...

2019-04-20 21:33:49 267

原创 C语言-文件读写操作

一、基本概念:1、文件流:C 语言把文件看作是一个字符的序列,即文件是由一个一个字符组成的字符流,因此 c 语言将文件也称之为文件流。即当读写一个文件时,可以不必关心文件的格式或结构。2、文本文件和二进制文件:计算机文件的存储,物理上都是二进制,所以文本文件与二进制文件的区别并不是物理上的, 而是逻辑上的。这两者只是在编码层次上有差异。简单来说,文本文件是基于字符编码的文件,常...

2019-04-19 11:35:01 9000 1

原创 C语言-内存管理(浅析)

一、进程和进程空间:1、什么是进程:指程序加载到内存后开始执行,到执行结束这样一段时间概念。对同一个程序,每打开一次该程序都会拉起一个新进程,关闭一个则结束一个进程。(程序是静态概念,而进程是动态概念)2、进程空间:程序运行起来就成为一个进程,进程所占用的空间就是进程空间。我们来看一下,进程空间是什么样的。3、栈(Stack):栈中可存放任意类型的变量,但必须是 aut...

2019-04-18 22:16:16 276

原创 C语言-结构体(struct)

一、引言:若要定义一个变量,可以使用 C语言提供的基本数据类型(int、char等);如果需要定义多个相同变量(N:1),可以使用数组完成;如果需要定义多个不同变量(N:M),此时 C语言己经无法逐个给出定义,于是放开自定义权限,struct关键字就应运而生了。二、结构体定义、访问、赋值请看下面例子:#define _CRT_SECURE_NO_WARNINGS#include...

2019-04-17 10:26:43 536

原创 Java-异常处理机制

一、java中异常处理机制?按照异常需要处理的时机分为: 编译时异常(也叫强制性异常、CheckedException) 运行时异常(也叫非强制性异常、RuntimeException)1、编译时异常:Java 认为编译时异常都是可以被处理的异常,所以必须显式处理编译时异常。否则就会发生错误无法编译。处理方法有两种:   (1) 当前方法知道如...

2019-04-16 16:07:39 323

原创 C语言-位运算

什么是位运算:程序中的所有数据,在计算机内存中都以二进制的形式存储。所谓位运算就是直接对数据在内存中的二进制位进行操作。C语言中的位运算符有:与(&),或(|),取反(~),异或(^),移位(<< >>)以及组合运算符(&= |= ^= >>= <<=)。一、位操作:1、位与(&):...

2019-04-15 10:43:51 494

空空如也

空空如也

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

TA关注的人

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