自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Morty的技术乐园

记录为更好的前行

  • 博客(13)
  • 论坛 (1)
  • 收藏
  • 关注

原创 排序算法——随机快速排序

引言随机快排是一个非常有意思的排序排序算法,它的算法思想用到了如递归、荷兰国旗问题等诸多元素,还意外的引入了随机性的概念。以下将逐步总结三个版本的快速排序,由浅入深总结快速排序的经典实现过程。荷兰国旗问题参考:《荷兰国旗问题》一、快速排序1.0在荷兰国旗问题中,我们通过简单的逻辑可以将一个数组分为两个区域或三个区域,但往往需要在题目之初给定一个 target 作为目标数以此划分。而在快速排序算法中,这个 target 选为排序范围上的最右边的数——arr[R],我们以 R 上的数为

2021-04-26 20:15:27 7

原创 荷兰国旗问题

一、问题描述荷兰国旗问题,顾名思义,就是按照荷兰国旗的形式,给定一个数 x ,将 <x 的数放到左边,=x 的数放中间,>x 的数放右边,将数组中的元素分成三块,有的时候可能要求 <= x 的放左边:二、解题思路首先,数组是无序的,如果要求 <= x 放左边,>x 的放右边,将数组分成两部分,该如何做?我们应当在数组的左边设定一个指针,指针位置以左,代表 <=x 的区域,然后再设计一个指针代表当前数 ,如果当前数 <=x,当前数与 <= .

2021-04-25 21:36:34 15

原创 排序算法——归并排序的相关问题

一、小和问题问题描述,给定一个数组,如[1, 3, 2, 6, 5],计算每个数左边小于自己的所有数的和,并累加。例如:1左边没有数3左边有一个小于自己的数 12左边有一个小于自己的数 16左边有三个小于自己的数 1 + 3 + 2 = 65左边有三个小于自己的数 1 + 3 + 2 = 6最后 1 + 1 + 6 + 6 = 14,上面给定数组[1, 3, 2, 6, 5] 的小和解就是 14.解题思路:这道题的常规思路是循环每个数,然后再遍历它左边的所有数,只要比自.

2021-04-20 21:03:17 17

原创 Redis 实用技术——事务

引言redis的事务不像关系型数据库的事务那样完整。“快”是redis的特征,在事务管理的过程中,使用muti命令开启事务块,当输入多条命令后,再使用exec命令执行事务块中的全部命令。Redis事务可以保证两件事:1、隔离性:事务是一个单独的隔离操作,这和关系型数据库的事务原则是一致的,事务中的所有命令都会顺序执行,且中途不会被其他事务打断。2、原子性:要么全部执行,要么全不执行。一、查看帮助MULTI、EXEC、DISCARD、WATCH 是 Redis 事务的相关命令:

2021-04-15 23:14:32 12

原创 Redis 实用技术——消息发布和订阅

引言发布订阅模型是redis的重要功能,它可以像网站动态一样,将消息发送到多个订阅者的主页里。一、常用命令二、消息格式消息是一个有三个元素的多块响应:如上图,发布者向 mysub 频道发送了一条消息,redis会返回当前订阅者数量。而订阅者这边,当第一次订阅时,响应块分为 3 行,第一行表示消息类型,subscribe :订阅成功 ;unsubscribe:表示取消订阅;message :表示这个响应块是一个发布的消息第二行表示频道名称第三行根据消息类型不同,s

2021-04-13 22:39:21 8

转载 Redis 实用技术——Pipeline

引言Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤:客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响应。 服务端处理命令,并将结果返回给客户端。因此,例如下面是4个命令序列执行情况:Client:INCR X Server:1 Client:INCR X Server:2 Client:INCR X Server:3 Client:INCR X Ser...

2021-04-13 20:54:57 8

原创 排序算法——归并排序

引言归并排序可以使用递归或迭代的方式来实现,时间复杂度是都是O(N * logN)。归并排序的核心是将待排序数组分组,可以整体二分,也可以设置步长迭代切分。归并排序在操作过程中,充分利用了上一次排序的结果,而 O(N ^ 2)的排序算法每次比较都是独立的,简单的说就是,上一次的比较行为完全和下次比较行为无关,这在一定程度上浪费了比较的既得结果。一、递归实现不论是递归还是迭代,归并排序最重要的部分是实现两个分组的归并,在归并的过程中同时做好排序。整个过程可以分为两个大的部分:迭代过程.

2021-04-11 21:09:46 18

原创 Redis —— 常用命令一览

引言参考《菜鸟教程 Redis 常用命令》一、总览二、key相关命令三、String 相关命令四、Hash 相关命令五、List 相关命令六、Set 相关命令七、ZSet 相关命令

2021-04-06 00:21:15 22

原创 算法设计中的基础常用代码

引言本篇博客旨在记录一些基础算法知识的常见组合用法,以及何时使用,需要注意的问题等,长期更新。为什么要这样总结呢?难道掌握了位运算、常用算法工具API的定义还不够吗?这是因为某些知识比如 &、 |、 ~、 Math.random 等这些基础知识如果只停留在知识记忆层面还是无法快速运用到算法的解题思路中去,还应该有一套常见组合用法或使用规律。这些组合用法通常并不是算法题的核心考点,但却起到连接算法思想、基础知识和解题实现的枢纽作用,就好比学习英语时,我们的目的是连词成句,但单词并不是简

2021-04-05 15:50:07 24

原创 递归算法及其时间复杂度分析

引言“递归” 一词是比较专业的计算机术语,在现实生活中,有一个更可爱的词——“套娃”。如果把“递归算法”叫做“套娃算法”,或许可以减少一些恐惧程度。套娃是有限的,同样,递归也是有限的,这和我们经常在影视作品中看到的“无限嵌套循环”是有很大区别的,递归一定存在某个可以返回的节点或条件,否则就会出现栈溢出错误(StackOverflowError)。其实“套娃”这个词已经足以概括递归算法的本质,就是函数本身调用自身,直到找到一个可以返回的条件,再层层返回。参考《盗梦空间》《明日边缘》等。递归算法

2021-04-05 13:01:24 57

原创 单向队列、双端队列、栈的模型实现

引言自己实现简单的队列、栈的逻辑结构。队列都包含头和尾两个指针,简单的单向队列只能在一端(如:head端)入列,在另一端(如:tail 端)出列;双端队列可以在 head 进出,也可以在 tail 进出。栈的模型更加简单,它分为 top 和 bottom 两个指针,只能在 top 端进出。经典的模型结构包含几个主要方法,进、出、isEmpty、size 等。一、队列的实现不论是单向队列还是双端队列,始终都是在操作 head 和 tail 两个指针。它们的实现没有什么本质区别,实际上,

2021-04-04 18:25:33 15

原创 链表的基本操作——反转与删除

引言链表相关的问题几乎都是coding问题,以下是两个简单的链表问题。一、单链表或双链表如何反转1.1 单链表的反转操作给定一个 Node 结构:public static class Node { public int value; public Node next; public Node(int data) { this.value = data; }}这是一个单链表结构, 假设初始时,a --> b --> c

2021-04-03 19:54:04 22

原创 异或运算的应用

一、基础知识异或运算,相异为1。异或运算是一种常用的位运算,在算法题中,对于避免额外的空间复杂度有独特的用处。异或运算也被称为“无进位相加”,它具有以下特性:特性1:0 ^ N = N特性2:N ^ N = 0特性3(交换律):a ^ b = b ^ a特性4(结合律):(a ^ b) ^ c = a ^ (b ^ c)特性3 和 4总结起来,就是同一批数,不论使用怎样的顺序,怎样的结合方式进行异或,其结果始终一样。二、算法题题目1:如何不使用额外空间交换两个数?

2021-04-03 10:52:13 16

空空如也

圣斗士Morty的留言板

发表于 2020-01-02 最后回复 2020-12-22

空空如也

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

TA关注的人 TA的粉丝

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