1 wyq小白

尚未进行身份认证

one小白的成长记录

等级
TA的排名 14w+

汉诺塔问题

汉诺塔问题相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图).游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好.操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上.分析:对于这样一个问...

2019-12-28 21:40:16

约瑟夫问题升级版

约瑟夫问题升级版编号为1~N的N个人按顺时针方向围坐一圈,每人持有一个密码(正整数,可以自由输入),开始人选一个正整数作为报数上限值M,从第一个人按顺时针方向自1开始顺序报数,报道M时停止报数。报M的人出列,将他的密码作为新的M值,从他顺时针方向上的下一个人开始从1报数,如此下去,直至所有人全部出列为止。分析:升级版的约瑟夫问题,就是在每个人的手中拿了一个密码,当这个人死了之后,拿着这个手中...

2019-12-26 17:01:01

约瑟夫问题

约瑟夫问题据说著名犹太历史学家Josephus有过一下的故事:在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲在一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3个人该人必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。然而Josephus和他的朋友并不想遵从,Josephus要他的朋友...

2019-12-26 10:36:19

递归

一、递归的定义一种计算过程,如果其中每一步都要用到前一步或前几步的结果,称为递归的。用递归过程定义的函数,称为递归函数,例如连加、连乘及阶乘等.简单的来说,程序反复调用自身即是递归.二、递归的使用递归是如何运作的?在这里我们用一张图片来展示一下.这是一个A函数递归调用自身的过程,因为递归是一个反复调用自身的过程,这就说明它每一级的功能都是一样的,因此我们只需要关注一级递归的解决过程即可...

2019-12-24 21:25:42

数据结构——单向循环链表

单项循环链表一、定义将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单向循环链表。(示意图如下)单向循环列表的实现的也是 list 的方法,在这里主要说一下插入元素和删除元素;插入元素的时候会遇到从表头插入、表尾插入和指定角标处插入,这些操作基本上和单链表的元素插入类似,但是需要注意的是从表头和表尾插入的时候,要考虑头指针和尾指针的移动,...

2019-12-20 22:42:58

数据结构——链队列

一、链队列队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出而已,我们把它简称为链队列。为了操作上的方便,我们将队头指针指向队列的虚拟头结点的后一个结点,而队尾指针指向最后一个结点。二、链队列的实现创建一个链表实现queue的接口public class LinkedQueue<E> implements Queue<E> { private...

2019-12-20 19:35:01

数据结构——链栈

一、链栈前面学习了栈的顺序存储结构,现在来看看栈的链式存储结构,简称链栈.(示意图如下)对于链栈来说,不存在栈满的情况,除非内存已经没有空间可以使用;但对于空栈来说,链表原定义是头指针指向空,那么链栈的空其实是 top=null 的时候。二、链栈的实现...

2019-12-19 23:24:34

数据结构——动态链表

一、链表的定义为了表示每个数据元素a1与其直接后继元素ai+1之间的逻辑关系,对数据元素a1来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息。我们把存储数据元素信息的域称为数据域,把存储直接后继位置的域称为指针域。指针域存储的信息称作链。这两部分信息组成数据元素ai的存储映像,称为结点。n个结点链结成一个链表,即为线性表的链式存储结构,因为此链表的每个结点中只包含一个指针域,所...

2019-12-19 11:39:25

LeetCode88. 合并两个有序数组

88. 合并两个有序数组给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m ...

2019-12-18 08:34:44

Leetcode674. 最长连续递增序列

Leetcode674. 最长连续递增序列给定一个未经排序的整数数组,找到最长且连续的的递增序列。示例 1:输入: [1,3,5,4,7]输出: 3解释: 最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开。示例 2:输入: [2,2,2,2,2]输出: 1解释: 最长连续递增序列是 ...

2019-12-17 14:49:30

数据结构——循环队列

一、循环队列数组队列的出队操作的复杂度是O(n),性能很差,解决方法就是使用循环队列(Loop Queue)在循环队列中,需要对队为空和队为满的时候进行判断,为了区分队空和队满两个条件,需要浪费capacity一个空间,让rear指针一直指向一个空的位置;当 rear= =front 时,队为空;当 (rear+1)%n= =front (n为数字角标的最大值)时,队为满.示意图如下...

2019-12-17 10:29:20

数据结构——队列

一、队列的定义队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表队列也是一种线性结构;队列是一种先进先出(First In First Out)的数据结构;队列的描述如下图:二、队列的实现先定义一个接口Interfacepublic interface Queue<E> extends Iterable<E>{ //获取队列中元素的个数 ...

2019-12-16 20:50:34

数据结构——双端栈

一、双端栈定义双端栈是指将一个线性表的两端当做栈底分别进行入栈和出栈操作. 在顺序栈的共享技术中,最常用的就是两个栈共享,即双端栈。利用栈底位置不变,栈顶变化的特性。首先申请一个一维数组空间,data[n],将两个栈的栈低分别放在数组的两端,分别是0和n-1,由于是栈顶动态变化的,这样可以形成互补,使得每个栈可用的最大空间与需求有关,由此可见,两个共享栈比两个栈分别申请n/2哥空间利用率高。...

2019-12-15 11:19:47

数据结构——栈(Stack)

一、栈的定义栈是限定仅在表尾进行插入和删除操作的线性表.二、 栈的特点栈也是一种线性结构;相比数组,栈所对应的操作是数组的子集;栈只能从一端添加元素,也只能从这一端取出元素,这一端通常称之为"栈顶";向栈中添加元素的过程,称之为"入栈",从栈中取出元素的过程称之为"出栈";栈的描述如下图:三、栈的实现...

2019-12-12 20:59:32

数据结构——线性表的顺序存储结构

一、数组基础数组就是把数据码成一排进行存放。Java中,数组的每个元素类型必须相同,可以都为int类型,string类型,甚至是自定义类型。数组的命名要语义化,例如,如果数组用来存放学生的成绩,那么命名为scores就比较合适。索引(index)是数组中的一个重要概念,它是我们给数组中的每个元素分配的编号,从0开始,依次递增。如果数组中存放了n个元素,第一个元素的索引是0,最后一个元素的索...

2019-12-11 19:17:18

LeetCode27. 移除元素

LeetCode27. 移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2,...

2019-12-04 23:17:09

LeetCode605. 种花问题

LeetCode605. 种花问题假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。示例 1:输入: flowerbed = [1,0,0,...

2019-12-03 16:29:11

122. 买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价格 ...

2019-12-03 09:22:48

LeetCode283. 移动零

LeetCode283. 移动零给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]说明:必须在原数组上操作,不能拷贝额外的数组。尽量减少操作次数。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/move-zero...

2019-12-02 17:43:19

LeetCode268. 缺失数字

LeetCode268. 缺失数字给定一个包含 0, 1, 2, …, n 中 n 个数的序列,找出 0 … n 中没有出现在序列中的那个数。示例 1:输入: [3,0,1]输出: 2示例 2:输入: [9,6,4,2,3,5,7,0,1]输出: 8来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/missing-numbe...

2019-12-02 14:43:15

查看更多

勋章 我的勋章
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条Blink获赞超过3个即可获得
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 1024勋章
    1024勋章
    #1024程序员节#活动勋章,当日发布原创博客即可获得
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。