自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 46. 78. 79. - 回溯算法

就我目前遇到的回溯问题,这要分为三类:子集问题比如数组[1,2,3],[1]可以是子集,[1,2]和[1,2,3]都是子集,甚至[ ]也是子集。因此,在这一类问题中,主要有以下几个特点;符合要求的结果长度不一定从何开始作为第一个遍历是不定的,比如[1,2]和[2,3]均可,但第一个元素分别是1和2相同位置的元素不能再次遍历结果中的顺序无关,比如[1,2]和[2,1]是一样的排列问题一般针对全排列问题,和子集问题有类似之处:从何开始作为第一个遍历也是不定的相同位置的元素不能再

2021-04-09 10:54:52 191

原创 15. 18. 209. - 双指针法

双指针法双指针,指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针、滑动窗口)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的。相同方向快慢指针:两个指针从数组或者链表的同一侧开始遍历,但是分别定义为快指针(fast)和慢指针(slow),两者步长不一样,直到达到停止遍历条件。比如环形链表问题。滑动窗口:利用双指针分别作为窗口的左右边界,但是窗口的长度(即双指针之间的距离)是否固定需要看具体情况而定相反方向对撞指针:双指针分别从数组或者链

2021-04-04 16:50:24 167

原创 31. 下一个排列 - 字典排序算法

题目表述:实现获取 下一个排列 的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须 原地 修改,只允许使用额外常数空间。本题解法所谓字典序,是指按照字典中字母升序的方式排列的。比如,第一个字母分别是b和q,那么排序后,b在前,q在后。如果第一个字母相同,那么比较第二个字母,以此类推,直到最后一个字母。如果并非字母而是数字,那么也是同样的道理。加入两个字母串比较到最后都是相同的,比如sigh和sight,.

2021-04-01 14:20:24 1499

原创 1. 两数之和

题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。暴力解法最开始想到的解法就是暴力解法,使用两轮循环,在第一轮循环中先固定一个数,再第二轮循环中,判断遍历到的数是否与固定数的和为target,如果是,则返回两个下标,如果不是,则继续循环。class Solution { public in.

2021-03-31 15:47:13 104

原创 中序线索化二叉树

中序线索化二叉树1. 简介2. 中序线索化的方法3. 代码详细4. 测试1. 简介对于二叉树来说,只能是很直观地知道某个节点及其左右子节点,但是如果想知道此节点按照某种方式遍历时的前一个节点(前继节点)和后一个节点(后继节点)的话,就不得不按照此种遍历方式对二叉树遍历一次,只有这样才能知道前继或后继节点。因此,==为了避免这种不得不遍历的麻烦,是否可以寻找一种简便的方式从而更快地获取某节点的前继或后继节点?==我认为这是对二叉树线索化的主要原因。另一方面是涉及到资源利用的问题。如上图所示,二叉树共有

2020-10-26 16:13:45 25058 4

原创 栈(后缀表达式的计算)

后缀表达式简单后缀表达式的计算后缀表达式的计算(完全)简单后缀表达式的计算就我个人来说,后缀表达式看起来很别扭,但是从变成来看,后缀表达式的处理比中缀表达式的处理方便很多。中缀表达式:( 30 + 4 ) x 5 - 6 = 164后缀表达式:30 4 + 5 x 6 - = 164对于中缀表达式而言,一般需要两个栈:数栈和符号栈,并且处理过程中需要注意括号运算。就上面的中缀表达式来看,先计算括号里的+,再计算x,最后计算 - 。但是,就后缀表达式来看,表达式中的运算符号出现顺序与中缀表达式对应的

2020-09-12 15:12:37 2209

原创 栈(中缀表达式的计算)

关于栈和中缀表达式的理解和处理程序栈的理解中缀表达式假如运算符只有+、-、*、/,且是单位数运算假如运算符不仅有+、-、*、/,还有()运算符,且同样是单位数运算栈的理解栈是一种数据结构,通常可以概括为“先入后出”。仿佛乡下堆草垛一般,堆的时候是从底下往上面一层层叠加,取的时候却是从上面往底下一层层摘出。可以以此来类比栈的结构与操作过程。栈的实现方式有很多,比如数组、链表等等。一般而言,用数组比较简单点,但是长度固定,不易扩充;用链表的话,不用限制长度,可以任意添加节点,但是操作方面要复杂一点。

2020-09-08 15:00:37 2487

原创 LeetCode第142题

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。想法:Floyd算法(看了注解之后的)// Floyd算法public class Solution { public ListNode detectCycle(ListNode head) { // 设置快、慢指针 ListNode quick = head; ListNode low = head; // 设置节点,保存快慢指针均指向的节点

2020-09-02 11:20:18 132

原创 LeetCode第92题

反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。说明: 1 ≤ m ≤ n ≤ 链表长度。题目要求是一次遍历实现。想法:假如需要反转的节点段是a -> b -> c -> d,那么首先设置一个节点temp,使得temp.next指向a,便于反转。之后,设置指针节p点始终指向a,为需要反转的第一个节点(也是反转后的最后一个节点);设置指针节点q指向此次待反转的节点,设置指针节点y指向每次反转后的第一个节点。class Solution { public ListNo

2020-09-02 10:37:47 577

原创 LeetCode第82题

给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中没有重复出现的数字。先考虑的是最简单的情况,假如是空链表,或者链表中只含有一个节点,这种情况下无需比较,直接返回即可。除此以外,需要逐步比较,设置两个节点,但实际上是两个节点的next指向链表中的节点,这样是为了删除方便,毕竟只是单链表,无法回溯。class Solution { public ListNode deleteDuplicates(ListNode head) { // 若链表为空,或只有一个节点

2020-08-31 23:26:49 455

原创 LeetCode第21题

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的目前想到的是先直接合并,然后冒泡排序:class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { // 若其中一个或全部链表为空 if(l1==null && l2!=null){ return l2; } if(l

2020-08-28 00:39:31 406

原创 LeetCode第19题

给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { // 求链表长度,时间复杂度为O(2n) int length = 0; ListNode temp = head; while(temp != null){ temp = temp.next;

2020-08-27 23:24:27 285

原创 环形链表

环形链表介绍环形链表其实很有意思,可以把环形链表看作将单链表或者双向链表的首尾两端相连而得到的。比如,若是将单链表的首尾两端相连,那么会得到一个顺时针方向或者是逆时针方向遍历的环形链表(注意只能是一个方向),比如这个样子:若是将双向链表的首尾两端相连的话,则会得到一个既可以顺时针方向也可以逆时针方向遍历的环形链表,比如这个样子:从逻辑关系上看,环形链表是不分首尾的。但是程序中为了遍历、查找等操作的方便,可以设置一个first节点(实际上就相当于一个入口节点,所有的环形链表操作可以从此节点开始),比

2020-08-27 16:27:05 284

原创 双向链表

双向链表介绍双向链表,顾名思义,对于链表中的每个节点而言,不仅仅存在指向下个节点的地址域,还存在指向上个节点的地址域,所以可以同时往上、往下溯源。我一般都会设置带有头节点的双向链表。在头节点中,数据域和指向上个节点的地址域都为null,仅仅表示链表从此节点开始,就像下面这个图片描述的:对于最后一个节点Node2而言,它的指向下个节点的地址域为null,这可以作为链表结束的判断标志。双链表的Java实现1. 构造节点类class Node{ // 数据 public int n

2020-08-27 15:58:24 183

原创 LeetCode第3题

给定一个字符串,找出其中不含有重复字符的最长子串的长度第一遍写的虽然结果没问题,但是时间超出限制,思路如下所示第一次的代码如下class Solution { public int lengthOfLongestSubstring(String s) { // 验证字符串是否为空 if(s.isEmpty()){ return 0; } // 无重复字符串长度 int length = 1

2020-08-27 15:25:31 155

原创 单链表

Java数据结构 — 单链表单链表介绍单链表的理解应该可以分为两部分:链表中的节点和节点之间的联系。与数组的不同之处在于:数组在物理上的存储是连续的,但是链表在物理上的存储是分散的,它仅仅是在逻辑结构上连续(逻辑上的“一条龙”)。对于链表中的节点可以看作一个存储单元,这个存储单元中包括两部分:数据域(或者叫数据块)和地址域(或者叫地址块)。数据域是用来保存当前节点的数据,地址域是用来指向下一个节点在哪的。节点之间的联系体现在各个节点的地址域中。通过第一个节点的地址域可以知道第二个节点在哪,通过第

2020-06-24 14:51:05 271

空空如也

空空如也

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

TA关注的人

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