Fork me on GitHub

随笔分类 -  数据结构与算法

摘要:概述 继续刷题,本篇算法主要偏向字符串和数组部分 第二十五题 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针random指向一个随机节点),请对此链表进行深拷贝,并返回拷贝后的头结点。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) 解 阅读全文
posted @ 2020-08-03 15:36 猿起缘灭 阅读(126) 评论(0) 推荐(0) 编辑
摘要:概述 继续刷题。。。 第十七题 输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构) 解题思路 这道题,一开始看可能会懵,这道题的关键就是先在A中找到B的根节点,当找到B的根节点之后,事情就简单了,就从这个根节点开始以相同的方式遍历A和B,然后比较,如果一致,就 阅读全文
posted @ 2020-07-17 19:07 猿起缘灭 阅读(135) 评论(0) 推荐(0) 编辑
摘要:概述 继续刷题。。。 第九题 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 解题思路 这道题的名字叫做变态跳台阶问题,那为什么叫变态我就不知道了,其实和第8题思路差不多。 假设第一次青蛙跳1级,那剩余n-1级,也就是还有f(n-1)种 阅读全文
posted @ 2020-07-16 16:36 猿起缘灭 阅读(142) 评论(0) 推荐(0) 编辑
摘要:概述 本文记录自己在刷剑指offer时候的解题,无他。。。 第一题 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 解题思路: 假设数组为: [[1 2 阅读全文
posted @ 2020-07-14 21:06 猿起缘灭 阅读(183) 评论(0) 推荐(0) 编辑
摘要:本文参考: 算法从入门到“放弃”(10)- 堆排序 图解排序算法(三)之堆排序 推荐大家看这两篇文章,文章中图画的非常好,我觉得作者非常用心,相比之下我就比较水了,大家可以把我的代码作为一个参考,其他的看看上面那两篇文章就可以了 概述 堆排序,听名字好像和java中的堆空间有点关系,但其实这两个兄弟 阅读全文
posted @ 2020-07-08 20:30 猿起缘灭 阅读(261) 评论(0) 推荐(0) 编辑
摘要:本文参考:图解排序算法(四)之归并排序,大家看这篇文章就够了,不用看我的文章,我的文章没他写的好 概述 前几篇文章,写了快速排序,希尔排序,这两种排序算法都是使用某种方法把数组分成几个部分,然后在每个小的部分进行排序,之后再对整体进行排序,不过快速排序和希尔排序的分段都不彻底,那什么是彻底的呢?就是 阅读全文
posted @ 2020-07-07 20:40 猿起缘灭 阅读(174) 评论(0) 推荐(0) 编辑
摘要:本文参考:图解排序算法(二)之希尔排序,大家看这篇文章就够了,不用看我的,我的文章为了给自己做个笔记,方便自己以后看 概述 希尔排序,听名字很奇怪,就是以这个算法的发明人的名字命名的,这个排序算法是对插入排序的一个优化版本,本来以为优化的很好,仔细研究了一下,很失望,优化的并不怎么样,最差的情况时间 阅读全文
posted @ 2020-07-07 11:30 猿起缘灭 阅读(208) 评论(0) 推荐(0) 编辑
摘要:概述 如果给我们一个数组,让我们把这个数组中的数从小到大排序,如果我们没有学习过什么排序算法,估计这个算法是我们最容易想到的,这个算法由于很容易想到,所以效果并不好,时间复杂度为O(n2),白瞎,基本没人用。 核心思想 第一步:遍历数组,把最小的元素找出来,和数组中的第一个元素交换位置 第二步:遍历 阅读全文
posted @ 2020-07-06 20:55 猿起缘灭 阅读(159) 评论(0) 推荐(0) 编辑
摘要:概述 最近在学习算法,面试时候问了我快速排序,当场懵逼了,竟然没有听说过,我支支吾吾了半天然后告诉面试官,我TM没听说过,然后面试官用一种看智障的眼神结束了面试(以上纯属虚构,哈哈),本来以为排序算法也就什么冒泡排序,快速排序什么的,今天自己一看,我姹,竟然那么多种排序算法,没办法了,只能一个一个的 阅读全文
posted @ 2020-07-06 20:31 猿起缘灭 阅读(160) 评论(0) 推荐(0) 编辑
摘要:概述 快速排序,听名字就是使用这玩意排序很快,但其实在最差的情况下他的时间复杂度是O(n2),和冒泡排序一样,平均时间复杂度为O(nlogn),还不错,听说使用的场景很多,但是我看了java8中ArrayList中的sort方法,使用的并不是这个算法,其他的在什么地方有使用,不太清楚。 核心思想 这 阅读全文
posted @ 2020-07-06 16:02 猿起缘灭 阅读(174) 评论(0) 推荐(0) 编辑
摘要:概述 最近在面试,发现基本上上点规模的公司都喜欢问算法的问题,但是在我实际的工作中使用这些算法的地方非常少,感觉就偶尔用一下递归,而且递归也不是什么算法,其他的很多算法很少使用,但是既然人家问了,那也没办法,说不定是因为人家的公司确实高大上,工作中很多的场景可以使用这些算法,本文介绍冒泡排序,一种很 阅读全文
posted @ 2020-07-06 15:23 猿起缘灭 阅读(209) 评论(0) 推荐(0) 编辑
摘要:概述 所谓的反转二叉树就是把二叉树的左子树变成右子树,把右子树变成左子树。 思路 这个我觉得相对于求二叉树的高度或者判断二叉树是不是完全二叉树来说,容易很多。其基本思路就是,只要可以遍历这颗二叉树就可以实现这个反转。 代码 二叉树构成代码: package com.example.demo.tree 阅读全文
posted @ 2020-04-20 22:13 猿起缘灭 阅读(981) 评论(0) 推荐(0) 编辑
摘要:思路 完全二叉树和非完全二叉树的最大的区别就是完全二叉树的叶子节点只能在最后一层后者倒数第二层,其他层其实是一个满二叉树,而且最后一层的叶子节点都要靠近最左边。 如图: 二叉树的构成代码和节点代码 二叉树: package com.example.demo.tree; import com.sun. 阅读全文
posted @ 2020-04-20 22:09 猿起缘灭 阅读(2146) 评论(0) 推荐(0) 编辑
摘要:概述 遍历二叉树在上一篇文章中已经讲过了,那如何求一颗二叉树的高度呢?这一讲就讲这个问题。 思路 其实这个思路很难说清楚,大致的意思就是每遍历一层就把高度加1,那问题来了,怎么判断我这一层遍历结束了呢?这个可以通过记录每一层的个数,然后当把这一层的每一个都遍历之后就说明这一层遍历完了,那问题又来了, 阅读全文
posted @ 2020-04-20 22:01 猿起缘灭 阅读(3314) 评论(0) 推荐(0) 编辑
摘要:概述 二叉树的遍历,一个老生常谈的问题,大学的时候就天天学习,但是那时候大多是了解每中遍历的方式,但是并没有用代码实现,工作之后,使用代码实现一下。 三种遍历方式的区别 具体的介绍我这里就不说了,只总结性的说一下,所谓的前序,中序,后序,的前中后,其实就是根节点被访问的前中后,前序遍历就是根节点在最 阅读全文
posted @ 2020-04-20 18:21 猿起缘灭 阅读(485) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示