自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java版找出链表中倒数第K个节点

题目:给定一个单向链表,要求找出该链表中倒数第 k 个节点,要求只能遍历一次链表,且空间复杂度为 O(1)。 思路1:为了得到倒数第k个结点,很自然的想法是先走到链表的尾端,再从尾端回溯k步。但是单向链表的结点只有从前往后的指针而没有从后往前的指针,因此这种思路行不通。 思路2: 既然不能从尾结点开始遍历这个链表,我们还是要从头结点来。假设整个链表有n个结点,那么倒数第k个结点就是从头结点开始的第n-k+1个结点。所以我们看下先遍历整个链表得到链表的结点个数n。再从头结点开始往后走n-k+1步就可以得到

2020-08-31 18:20:56 418

原创 java两个有序的数组的排序

题目:有两个排序的数组A1和A2,内存在A1的末尾有足够的空余空间容纳A2。请写一个函数,把A2的所有数字插入A1中,并且所有的数字是排序的。 题目上的条件是内存在A1的末尾有足够的空余空间容纳A2。所以跟归并排序还不太一样。跟上一篇文章的替换空格的解决方案很像。 首先计算merged后数组的总长度。声明一个指针indexMerged,指向merged后的数组的末尾。 声明两个数组索引指针,分布遍历连个数组,比较值的大小,将较大的值放在indexMerged的位置中,indexMerged指针向前移动一

2020-08-28 15:29:11 1017

原创 java版替换空格

题目:请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 这个问题有两种解法:一是我们需要再原来的字符串上做替换。二是创建新的字符串并在新的字符串上替换。 对于第一种情况,在原来的字符串上做替换,如果从头到尾扫描字符串,每一次碰到空格字符的时候做替换。由于是把1个字符替换成3个字符,我们必须要把空格后面所有的字符都后移两个字节,否则就有两个字符被覆盖了。假设字符串的长度是n,对于每个空格字符,.

2020-08-27 17:57:40 641

原创 java版二维数组的查找

题目:给定一个二维数组,其每一行从左到右递增排序,从上到下也是递增排序。给定一个数,判断这个数是否在该二维数组中。 解题思路: 我们可以利用这个二维数组,每一行都从左到右递增,每一个列都从上至下递增的特性,选取从右上角或者左下角的数字开始查找。 demo: public class TestDemo { public static void main(String[] args) { int[][] array = { { 1, 2, 8, 9 }, { 2, 4, .

2020-08-27 16:08:52 533

原创 java版第一个只出现一次的字符

题目:在字符串中找出第一个只出现一次的字符。如输入"abacbcdeff",则输出'd'。要求时间复杂度为O(n)。 为了解决这个问题,我们可以定义一个哈希表(外部空间),其键值(key)是字符,而值(Value)是该字符出现的次数。 同时我们需要从头开始扫描字符串两次: (1)第一次扫描字符串时,每扫描到一个字符就在哈希表的对应项中把次数加1。 (2)第二次扫描是,每扫描到一个字符就能从哈希表中得到该字符出现的次数。这样第一个只出现一次的字符就是符合要求的输出。 第一次扫描时,在哈希表中更新一个字符

2020-08-27 15:38:27 317

原创 递归与栈

参考:https://blog.csdn.net/bobbypollo/article/details/79891556 《java数据结构和算法》 什么是递归? 递归的基本思想:就是把规模较大的一个问题,分解成规模较小的多个子问题去解决,而每一个子问题又可以继续拆分成多个更小的子问题。最重要的一点就是假设子问题已经解决了,现在要基于已经解决的子问题来解决当前问题;或者说必须先解决子问题,再基于子问题来解决当前问题。 或者换种角度理解:递归解决的是有依赖顺序关系的多个问题。 假设问题有如下的依赖.

2020-08-21 17:39:37 4966

原创 数据结构之二叉堆

参考:《漫画算法:小灰的算法之旅》 二叉堆本质上是一种完全二叉树,它分为两个类型。最大堆和最小堆。 最大堆:最大堆的任何一个父节点的值,都大于或等于它左、右孩子节点的值。 最小堆:最小堆的任何一个父节点的值,都小于或等于它左、右孩子节点的值。 二叉堆的根节点叫做堆顶。 注:什么是完全二叉树,理解完全二叉树,需要了解什么是满二叉树,一个二叉树的非叶子节点都存在左右孩子,并且所有叶子节点都在同一层级上,那么这个树就是满二叉树。简单地说,满二叉树的每一个分支都是满的。 完全二叉树的定义:对于一个有n个节点的

2020-08-19 18:06:05 224

原创 数据结构之二叉树

参考:《漫画算法:小灰的算法之旅》 二叉树是树的一种特殊形式。这种树的每个节点最多有2个孩子节点。二叉树节点的两个孩子节点,一个被称为左孩子(left child),一个被称为右孩子(right child)。这两个孩子节点的顺序是固定的。 二叉树的存储 数据结构分为物理结构和逻辑结构。二叉树属于逻辑结构,它可以通过多种物理结构来表达。 1、链式存储结构 2、数组 链式存储: 链式存储是二叉树最直观的存储方式。 我们知道链表是一对一的存储方式,每个链表节点拥有data变量和一个指向下一个节点的ne

2020-08-19 12:29:43 1467

原创 Quartz的学习笔记

Quartz Quartz是一个完全由java编写的开源作业调度框架。它可以创建简单或者复杂的几十、几百、甚至成千上万的job。此外,quartz调度器还支持JTA事务和集群。 添加依赖 <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}&l

2020-08-11 15:02:37 440

原创 Rest Api访问控制

2000年,Roy Thomas Fielding在他的博士论文中提出的概念。 Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。这个词组的翻译是"表现层状态转化"。 REST API一般用来将某种资源和允许的对资源的操作暴露给外界,使调用者能够以正确的方式操作资源。Rest API需要清晰定义哪些操作能够公开访问,哪些操作需要授权访问。一般而言,如果对RestAPI的安全性要求比较高,那么,所有的API的所有操作均需得到授

2020-08-07 14:21:52 377

原创 redis实现分布式锁

做分布式锁的思路: 用一个全局唯一的资源来满足资源竞争的顺序执行和原子性就行。 步骤: 1、A先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止锁忘记了释放。但这种做法可能带来的一个问题:在setnx之后执行expire之前进程意外crash或者要重启维护了,导致永远不释放该锁。 2、为了避免上面提到的问题。setnx时加上一个时间戳,表示失效时间。 SETNX lock.foo <current Unix time + lock timeout + 1> 该

2020-08-05 15:26:48 153

空空如也

空空如也

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

TA关注的人

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