
算法
屿岸
这个作者很懒,什么都没留下…
展开
-
(排序二)归并排序java代码加时间复杂度分析
归并排序时间复杂度分析:归纳法:T(n)<2 T(n/2)+cn T(n)<4 T(n/4)+2 cn T(n)<8 T(n/8)+3 cnn个数,依次分层如:假如n为16,分为左右,归并的时候遍历次数:n(8+8)分为4份时(4,4,4,4),归并的时候,先4+4,4+4一次,然后 8+8一次故为2*n次分为8份时(2,2,2,2, 2,2...原创 2018-10-26 10:25:41 · 814 阅读 · 0 评论 -
二叉树 (三)判断是否是搜索二叉树
搜索二叉树:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。即 二叉搜索树的中序遍历一定是从小到大排好序的所以判断一棵树是否是二叉搜索树 查看其中序遍历是否为从小排到大的即可修改非递归版本的中序遍历代码。设一个pre用来保存上...原创 2018-11-23 18:40:28 · 559 阅读 · 0 评论 -
折纸问题(递归求解)
折纸问题:请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时 折痕是凹下去的,即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一 个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。例如:N=1时,打印: down;N=2时,...原创 2018-11-23 16:24:19 · 1689 阅读 · 0 评论 -
二叉树(二)判断是否是平衡二叉树,完全二叉树,求完全二叉树节点个数
平衡二叉树:在这颗树中任何一个节点,其左子树和右子树的高度差不超过一 判断一棵二叉树是否平衡 可以用递归的方式 类似于求二叉树的深度完全二叉树:略public static class Node { public int value; public Node left; public Node right; public Node(int data) { th...原创 2018-11-21 21:16:49 · 548 阅读 · 0 评论 -
二叉树(一)二叉树的递归与非递归遍历;二叉树的后继节点
一.二叉树的递归遍历与非递归遍历先序遍历:根节点,左节点,右节点。中序遍历:左根右后序遍历:左右根二叉树:public static class Node { int value; Node left; Node right; Node(int data) { this.value = data; } }1.1递归方式:三种遍历// 先...原创 2018-11-20 18:51:04 · 185 阅读 · 0 评论 -
链表(二)三种方式判断链表是否为回文结构额外空间O(1)
判断一个链表是否为回文结构(只看黑体字和代码即可)思路一:把链表节点依次压入栈中,然后依次从栈中拿出节点与链表节点进行比较// 额外空间复杂度O(n)借助了栈结构 public static boolean function1(Node head) { Stack<Node> a = new Stack<Node>(); Node help = he...原创 2018-11-14 17:30:49 · 179 阅读 · 0 评论 -
链表(四)复制含有随机指针节点的链表
题目:一种特殊节点描述如下:public static class Node{ int value; Node next; Node rand; public Node(int a){ this.value=a; } }Node类中的value是节点值,next指针和正常单链表中next指针的意义一 样,都指向下一个节点。rand指针是Node类中新增...原创 2018-11-15 22:30:42 · 140 阅读 · 0 评论 -
链表(三)链表形式的荷兰国旗
问题:给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数point。实现一个调整链表的函数,将链表调整为左部分都是值小于pointt的节点,中间部分都是值等于pivot的节点,右部分都是值大于point的节点。除这个要求外,对调整后的节点顺序没有更多的要求。第一种解法:类似于荷兰国旗,借助一个数组,把链表所有节点放入一个数组中,将此数组进行三个区域的划分。//划分结束...原创 2018-11-15 13:15:32 · 305 阅读 · 0 评论 -
链表(一)反转单链表+打印两个链表公共部分
反转单链表:要求链表长度为N,时间复杂度要求为O(n),额外空间复杂度为O(1)思路1:先将head.next的节点保存下来,然后修改head的指向,(指向前一个节点)。然后保存当前head节点(为下一节点的前结点),将小标[i]移动位置到下一个节点继续操作。//直接反转 public static Node reverse(Node head) { Node pre=null;...原创 2018-11-13 20:40:30 · 139 阅读 · 0 评论 -
猫狗队列
给你一个这样的类:public class DogCatqQueue { public class Pet{ private String type; public Pet(String type) { this.type=type; } public String getPetType() { return this.type; } } public ...原创 2018-11-13 16:22:48 · 155 阅读 · 0 评论 -
实现一个具有GetMin方法的栈
实现一个栈,要求实现Push(出栈)、Pop(入栈)、Min(返回最小值的操作)的时间复杂度为O(1)思路1://借助库函数中的队列实现一个新的队列,新的队列包含一个新的函数,该函数功能时,可以得到此队列的最小值//用两个队列完成,一个队列存放内容,另一个队列存放目前为止队列中数字的最小值//每进入一个数,存数队列正常进数,最小值队列要进行比较,当前队列的最小值与要进来的数谁小,选取最小的...原创 2018-11-04 21:05:06 · 329 阅读 · 0 评论 -
固定数组实现队列与固定数组实现栈结构
用固定数组实现栈:(栈:先进后出)需要一个变量(index)指示入栈位置同时也是当前出栈的位置(栈进出位置一致,所以只需要一个变量用来指示)判断栈是否为空或者为满时,只需要判断当前位置的小标 实现栈所需要实现的函数:(1)构造函数构建栈,(2)入栈函数push(3)出栈函数pop(4)得到栈顶的值peek Index=0时,当前栈空,index=arr.Length时,当前栈...原创 2018-11-04 20:10:12 · 186 阅读 · 0 评论 -
栈队列互相转换
两个 队列 实现 栈: 队列结构是先入先出,用两个队列结构,数组从队列1到队列2,元素顺序不会变。栈结构是先入后出。即每次出栈的内容都是将队尾弹出,所以准备两个队列,主队列 一个是加入数据的时候进入的队列(用来入栈)辅队列 一个是弹出数据的时候(弹出队尾数据)所需队列。弹出数据:将队列1 中的数据依次加入队列2,直到队列1中只剩一个数据为止。此时剩余的数据便是栈需要弹出的数...原创 2018-11-06 15:59:31 · 512 阅读 · 0 评论 -
(排序一)冒泡排序+选择排序+插入排序
冒泡排序:从数组末尾开始依次与姓林的进行比较,如果a[i]<a[i+1] 交换位置,这样在第一轮比较后最大的冒在第0位置,然后再从末尾开始比较,然后次大的在第1的位置,依此类推时间复杂度:O(n^2)额外空间复杂度:O(1)public static void popsort(int []arr) { if (arr == null || arr.length <...原创 2018-10-27 16:25:30 · 153 阅读 · 0 评论 -
(排序三)荷兰国旗与快排(三切分)
(二切分)给定一个数组arr和一个数num,小于等于这个数字的数放在数组的左边,大于这个数字的数放在数组的右边。要求:时间复杂度O(n),额外空间复杂度O(1)思路:在此处使用一个标记,初始位置为数组最左边-1用来区分小于等于区域,在标记的左边都是小于等于区域内的数,标记的位置代表小于等于区域的最后一个数。数组从0位置开始便利,依次判断arr[i]是否小于等于num,如果是,则arr[i]与小...原创 2018-10-27 15:02:00 · 246 阅读 · 0 评论 -
(排序四)堆排序详解
1)完全二叉树;父节点i,子节点对应2*i+1,2*i+2在一个数组中,可以脑补一个完全二叉树2)堆:1.大根堆:在一个完全二叉树中,任何一个字树的最大值都是这颗子树的头部(根节点永远是所在子树中最大的)2.建立大根堆:给你一个数组,建立大根堆遍历数组,每遍历一个元素a[i]保证0-i范围上是大根堆,在遍历到i+1时,保证0-i+1范围上是大根堆。(完全二叉树上每增加一个元素...原创 2018-10-29 21:09:36 · 261 阅读 · 0 评论 -
链表(五) * 返回两个链表相交的第一个交点
问题:给定两个链表的头结点,head1,head2,链表可能有环可能无环。这两个链表可能相交可能不相交。请实现一个函数,如果相交,返回相交的第一个节点,如果不相交返回null,如果链表长度分别为m,n要求时间复杂度O(m+n),额外空间复杂度O(1)此问题可以拆分成三个子问题:1.判断链表有环无环,有环,返回入环的第一个节点。无环,返回null2.如果两个链表都无环,实现一个方法:...原创 2018-11-17 12:36:15 · 399 阅读 · 1 评论