
算法
xipenfei
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
使用环形单向链表演示约瑟夫环问题Scala版本
思路 约瑟夫环问题 : 题目是 假设有N个小朋友按顺序围成一圈,每个小朋友都有一个编号,假设从第m个小朋友从1开始报数,报到k的小朋友出圈,从出圈的下一个小朋友继续报数,重复上面的报数。直到所有的人出圈位置。 求出圈的小朋友的顺序是什么 解决方案: 我们使用的是单向的环形链表作为数据结构 思路大致分为 寻找指定开始节点 跳动指定的步长-1(需要获取弹出节点的前一个节点,才可以做删除) 显示弹出节点 代码 package com.xipenhui.cn import scala.collection.原创 2020-10-03 20:17:54 · 284 阅读 · 0 评论 -
数据结构-模拟单向链表
整体思路 今天介绍手动模拟单向链表。个人理解的链表的结构类似于 拆盒子游戏,表面上看存储是一个链条结构,实际存储是重复包装的方式,我们需要实现的删除,插入,更新 只是在层层盒子中间去掉盒子,增加盒子,该盒子的方式 首先是基本的存储结构 单向链表的存储结构如下,单向链表为当前的 对象中有一个当前对象的属性。可以理解为 当前的盒子里面不仅可以装东西,还可以装其他盒子 case class HeroNode(hNo:Int,hName:String,hNickName:String){ var no = hN原创 2020-10-01 18:22:49 · 206 阅读 · 0 评论 -
使用数组实现环形队列Scala版本
整体思路解析 上次我们演示了使用数组实现队列的方式,在结尾处提出了一个问题,因为我们使用双指针后移的方式,被弹出队列的元素依然存在数组中,空间不能被重复利用。 这次我们提出了使用数组和双指针实现环形队列的方案。完成资源的利用。 基本思路: 1. 初始化的双指针head 和tail 的初始值为0,在添加和弹出的时候分别将指针后移。那么实际的tail指针是指向了最后一个数字的下一位。因此环形队列的实际存储长度为 数组长度-1 2. 利用tail 和head 对数组长度取模的方式,完成在前面的资源位置利用 3.原创 2020-10-01 18:12:36 · 191 阅读 · 0 评论 -
使用数组模拟队列Scala
这次使用数组模拟队列 基本思路是使用head 和tail的双指针,当添加时候 tail指针向后移动。弹出队列头的时候 head指针向后移动。两个指针范围内的值就是队列的内容 这次的队列有缺陷,就是无法重复利用已经被使用过的位置。下次我们使用数组模拟环形队列 代码 package cn.xipenhui.chapter1 import scala.io.StdIn object ArrayQueueDemo { def main(args: Array[String]): Unit = {原创 2020-09-29 00:39:18 · 118 阅读 · 0 评论 -
稀疏数组Scala
稀疏数组的存储问题和解决思路 稀疏数组因为有很多位置没有存储值,因为没有存储的值使用的是默认值填充,特别是在二维数组的情况下,我们这里也用二维数组来举例,因为数组初始化时候会设置大小。 基本的实现思路是,我们将有值的位置,和值的大小存储起来,保存在另外一个数组中 代码 package com.xipenhui.cn.chapter_01 import java.io._ import java.util import scala.collection.mutable import scala.colle原创 2020-09-29 00:29:37 · 161 阅读 · 1 评论 -
图解算法 第一章 二分查找
算法入门二分查找和大O表示法 二分查找 提出问题 我们要在字典中查找单词hello的意思,改如何快速的查到到他? 在没有目录的情况下,最笨的方法就是从字典第一页开始找,找到hello为止。相信有点经验的小伙伴都不会这样做。 另一种是从中间为止开始找,比如从首字母o开始,然后确定hello在o的前面还是后面。这基本是二分查找的原理。 2.图示,在0~10...原创 2020-04-28 19:23:34 · 617 阅读 · 0 评论