
算法
fanfan要努力呀
暂时就用csdn来记录我的复习之路吧
展开
-
关于时间复杂度和空间复杂度
写在前面的话: 这里写logN就表示以2为底数,因为2为底数打不出来哈哈哈时间复杂度用于评价一个算法流程的好坏.先看时间复杂度的指标(再看常数项),即(N^2)/100 + 10N + 1我们也看成时间复杂度是O(N^2),其中N就是样本量 .然后再分析不同数据样本下的实际运行时间.常数时间的操作:概念:一个操作如果和数据量没有关系,每次都是固定时间内完成的操作,就叫做常数操...原创 2019-05-02 13:43:02 · 186 阅读 · 0 评论 -
矩阵和链表的几个题目
猫狗队列问题题目描述如图: .猫狗队列代码.转圈打印矩阵(matrix)题目: 给定一个矩阵,请你按照顺时针转圈的方式打印它,如图: 如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 打印结果应该为:1 2 3 4 8 12 16 15 14 13 9 5 6 7 11 10. 这类似的题目不能去想如...原创 2019-06-11 16:28:02 · 486 阅读 · 0 评论 -
链表部分经典题目
不懂的话就给我留言吧,虽然我也菜题目一: 如何判断一个单链表是否有环?有环的话返回进入环的第一个节点,无环的话返回空要求: 如果链表长度为N,请做到时间复杂度为O(N),额外空间复杂度为O(1),注意这个题目的隐含条件是没有重复元素思路1: 如果没有额外空间复杂度的限制的话,我们可以用哈希表或者hashset实现,即我们去遍历整个链表,将节点不断添加到哈希表/hashset中,当其...原创 2019-06-25 13:19:23 · 573 阅读 · 0 评论 -
二叉树题目_1
不懂可以给我留言,虽然我也很菜,也可以看我在**二叉树基础最后面给的视频,都有**题目1题目如图:[外链图片转存失败(img-8YyNV3hd-1562128391216)(https://github.com/fanfan999/MyPostImage/raw/master/二叉树题目-1/题目1.png)].这个题目的规律(记住就行)如果一个节点node,如果它有右子树(...原创 2019-07-03 12:34:57 · 473 阅读 · 0 评论 -
哈希函数和哈希表
哈希函数和哈希表1. 什么是哈希函数它是一种映射关系,它可以把任意长度的输入映射到任意一个固定长度的整数值,也称为散列函数,其值是十六进制的数。说白了,哈希函数就是用来将key-value结构中关键字值转换为数组的下标的函数(一般都是通过取模,而且这样子在数据量很大的情况下一般是均匀分布的),然后将该结构存放到数组中去,然后这个数组就叫做哈希表.这个固定长度不是说所有长度的输入获取到的整数...原创 2019-07-12 20:24:41 · 1287 阅读 · 0 评论 -
二叉树基础
title: 二叉树date: 2019-06-26 08:27:46tags: 二叉树categories: 算法不懂可以给我留言,虽然我也很菜二叉树的基本概念什么是二叉树二叉树简单来讲就是一棵树嘛,树大家都知道的吧,有树枝,二叉树只不过是一种每个节点都只有两个树枝的树,其实就是链表,只不过这个链表只有三个部分–一个数值部分和两个节点(左子结点和右子节点),如果你前面链...原创 2019-06-28 14:57:21 · 362 阅读 · 0 评论 -
利用哈希表设计一个RandomPool结构
title: 哈希题目date: 2019-07-12 20:23:52tags: 哈希题目categories: 算法注意: 一般哈希表的增删改查的时间复杂度为O(1).题目1题目如图:原创 2019-07-13 19:48:45 · 220 阅读 · 0 评论 -
递归
1. 介绍递归和动态规划暴力递归:把问题转化为规模缩小了的同类问题的子问题.有明确的的不需要继续进行递归的条件(base case也就是递归的出口,例如当节点为空之类的).有当得到了子问题结果之后的决策过程.不记录每一个子问题的解.动态规划(就是为了优化暴力递归):从暴力递归中来.将每一个子问题的解记录下来,避免重复计算.把暴力递归的过程,抽象成状态表达.并且存在化简形式...原创 2019-07-14 18:35:41 · 127 阅读 · 0 评论 -
链表基础
链表和数组都是一种数据结构数组是一段连续的存储空间链表空间不一定保证连续,只能通过上一个节点的指针找到下一个节点链表的分类按照连接方向单链表: 只有一个数值域和一个指针,而且只能通过next指针指向下一个节点,所以两条单链表是不可能形成X形结构的.双链表: 有两个指针和一个数值域,pre指针指向上一个节点,next指针指向下一个节点按照有环无环分类...原创 2019-06-20 11:00:36 · 218 阅读 · 0 评论 -
桶排序
桶排序,计数排序,基数排序都不是基于比较的排序,也就是说他们与样本的实际数据情况有很大关系,实际中不经常使用,其时间复杂度都为O(N),额外空间复杂度都为O(N),而且都是稳定的排序桶排序桶排序就是一个概念,不是具体的一种排序方法,其中的**基数排序和计数排序**才是桶排序的具体实现.举例: 现在有一个数组arr,里面存放着从0-60的共计61个元素,我们可以拿一个同样长度为61的新数组c...原创 2019-05-22 23:49:31 · 126 阅读 · 0 评论 -
冒泡排序,选择排序,插入排序
冒泡排序理解:在水里小泡泡往上面浮,大泡泡往水下沉,所以冒泡排序其实就是前一个和后一个比较,小的放前面,大的放后面.原理:以int[] arr = {2,3,4,1,9,7,5}为例.第一圈:先数组中第一个元素(下标为0)和数组中第二个元素(下标为1)比较大小.arr[0] > arr[1],两者交换.arr[0] <= arr[1],两者不交换然后比较数组第...原创 2019-05-02 13:43:53 · 123 阅读 · 0 评论 -
算法中很好用的工具-对数器
对数器当你碰到一个题,写好代码以后,你想验证是否正确,那么我们应该怎么办呢?可以自己多举几个例子,但是自己举例子考虑得可能不够周全.去找OJ(Online Judge在线评测),但是可能我们不知道这个题在哪个平台上有.自己写一个对数器进行验证,说白了对数器的作用就是给定一组样本,在你的算法和对数器上跑,跑出来结果永远一样的话,那就说明算法是正确的.对数器是什么:说到底,对数器...原创 2019-05-02 15:42:56 · 787 阅读 · 0 评论 -
关于递归和递归时间复杂度的估算
递归两个小例子:举例1: 在一个数组中找到最大值我先找左边最大值和右边最大值(以下标中间为界),两者相比较,较大的就是全局最大值我直接贴代码了哈://结束条件 if (L >= R) { return array[L]; } //找到中间位置,划分为左右两边 int mid = (L + ...原创 2019-05-03 12:08:14 · 1521 阅读 · 0 评论 -
快速排序
快速排序一个引入例子荷兰国旗问题荷兰国旗问题就是指,给定一个目标数target和目标数组array,设计一个方法,使得该数组中大于target的数都放在左边,小于target的数都放在右边,等于target的数都放在中间.步骤:设计一个左边界,使其初始位置在下标0的左边一位.设计一个右边界,使其初始位置在最后一个元素下标的的右边一位即array.length.给定一个计数变量c...原创 2019-05-09 21:45:08 · 85 阅读 · 0 评论 -
堆排序
堆排序(重要)前言: 时间复杂度为O(N*logN),额外空间复杂度为O(1).二叉树: 二叉树就是一棵特殊的树,即每一个节点只有两个子节点.满二叉树: 首先它是一个二叉树,如果这个二叉树的每一个层的结点数都达到最大值(或者理解为除了最下面一层没有任何子节点以外,其它所有层都是满满当当的二叉树),则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K(K从1开始),且结点总数是...原创 2019-05-14 20:18:51 · 105 阅读 · 0 评论 -
归并排序
归并排序** 写在前面的话: 归并排序的时间复杂度为O(N*logN),额外空间复杂度为O(N)**.什么是归并排序呢?一点点专业叫法: 迭代就理解为递归,分治就理解为一分为二的过程.举例:以[2,5,7,1,6,4]为例首先将其一分为二,划分成两个部分,分别为[2,5,7]和[1,6,4].然后分别对左右两部分进行排序,得到[2,5,7]和[1,4,6].申请一个辅助数组,长度...原创 2019-05-07 21:11:52 · 102 阅读 · 0 评论 -
快速排序
快速排序(重要,用的很多)一个引入例子荷兰国旗问题荷兰国旗问题就是指,给定一个目标数target和目标数组array,设计一个方法,使得该数组中大于target的数都放在左边,小于target的数都放在右边,等于target的数都放在中间.步骤:设计一个左边界,使其初始位置在下标0的左边一位.设计一个右边界,使其初始位置在最后一个元素下标的的右边一位即array.length....原创 2019-05-12 08:45:40 · 97 阅读 · 0 评论 -
栈和队列的两个题目
1.注意:* 栈中: push是压栈,peek是返回栈顶元素,pop是弹栈.* 队列中: offer是进队列,poll是出队列,peek是返回队列首元素.* linkedlist实现了queue接口,所以我们可以把linkedlist当作队列来使用.其中queue接口和list,set接口一样都是继承自collection接口.实现一个特殊的栈,在实现栈的基础功能的基础上,再实现返回栈...原创 2019-05-25 23:14:42 · 163 阅读 · 0 评论