Mike's Blog
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于

带权值的最短路径

图示 如上的图示可由一组数据表示 0 1 12 -1 -1 -1 0 9 3 -1 -1 -1 0 -1 5 -1 -1 4 0 13 -1 -1 -1 -1 0 第n行第m个代表Vn到Vm的距离权值,不直接可达是-1,直接可达是对应权值,自己到自己的距离是0 注意:路径是单项的,Vn到Vm 和 Vm到Vn 权值很可能不同,比如一个是-1,一个是3 思路深度优先遍历,在每一级探索出全部的可能,
2021-05-06
算法
#数据结构与算法

找出两个无环单链表的相交点

题目如图所示,找出两个单链表的相交点,若没有返回null 最好不要使用其他的辅助的数据结构,降低空间复杂度 代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566class Node {
2021-04-28
算法
#数据结构与算法

使用递归的方式反转栈

反转栈最容易想到的是,利用额外的空间,比如数组来暂存数据,然后反序放入栈 递归也是可以的,可以使用递归调用产生的栈帧暂存数据,利用递归的回溯过程来反转栈 难点是:每次要去取出栈底的元素,这个与栈的常用的提供的pop()方法相悖,也就是getAndRomoveBottom()方法的具体实现。 代码12345678910111213141516171819202122232425262728293
2021-04-28
算法
#数据结构与算法

二叉树根到叶子所有数字的和

图示 代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960import java.util.ArrayList;import java.util.List;class Node { int val; No
2021-04-28
算法
#数据结构与算法

旋转数组找最小值

旋转数组[1,2,3,4,5,6,7,8] 经旋转得到 [4,5,6,7,8,1,2,3] ,他就是旋转数组 要求: 找到最小值,时间复杂度尽可能低 分析如上,可以看到,旋转数组的第一个值可以将整个数组划分为两个部分,小于它的和大于等于它的,那么我们可以二分,找到的是大于等于首部的,就往右去搜索。找到小于首部的,就往左去搜索。 代码123456789101112131415161718192021
2021-04-28
算法
#数据结构与算法

常见的单例模式

单例模式含义:确保一个类只有一个实例,并提供该实例的全局访问点 意义:实际开发中,一些特定的组件只需要一份即可,如果在需要该组件的时候现场去new这个组件,那么将会产生很多不必要的开销。单例模式很好地解决了这个问题,需要的时候创建或是提前创建好这个对象,在全局提供唯一的访问点,避免了很多该类对象大量创建和销毁的开销。 关键点: 构造器私有:保证类外部无法创建此类对象 一个私有的静态变量保存该类的
2021-03-24
设计模式
#探赜索隐

快排的非递归写法

递归写法的思路递归的写法的思路是,拿到一个标准量,找到它对应的位置,然后调用函数自己去实现左边和右边的更小规模的排序。 非递归写法栈帧又称 过程活动记录 ,主要用于记录函数调用过程中的一些 局部变量和中间数据 。 递归调用在虚拟机栈中的实现也是不断压栈的操作,栈顶的栈帧是当前活动栈帧,如果再有调用,就继续压栈 那么我们能否使用栈这种数据结构来实现递归过程的模拟呢,答案是肯定的。 对于快排来讲,如
2021-03-22
算法
#数据结构与算法

环状链表相关

环状链表的检测环状链表的检测比较好办,使用双指针的方法 一个快指针,一个慢指针。快指针步进值是2,慢指针的步进值是1 无环的时候:快指针走的快,慢指针走的慢,因为是直线型的,快指针先到达链表结尾便停止了,所以快慢指针永远不会相遇。 有环的时候:慢指针没走到环上的时候,因为是直线,所以不会相遇。但是慢指针一旦到达入环点,就可以看做慢指针在快指针的前面,他们之间是一定有距离的(0也算是距离,dista
2021-03-20
算法
#数据结构与算法

手写LRU缓存算法

题目描述链接:https://www.nowcoder.com/questionTerminal/3da4aeb1c76042f2bc70dbcb94513338来源:牛客网 设计一个数据结构,实现LRU Cache的功能(Least Recently Used – 最近最少使用缓存)。它支持如下2个操作: get 和 put。 int get(int key) – 如果key已存在,则返回k
2021-03-13
算法
#数据结构与算法

快速手写堆排序

问题描述 [[1,2],[2,3],[4,5],[7,9],[0,3],[0,1],[1,1]] 这是坐标输入,请按照离原点的距离对坐标进行排序,要求使用手写的堆排序算法 划分划分业务:distance()计算距离,swap()负责交换位置,heapify()将元素负责堆化,buildHeap()负责调用heapify()建堆,heapSort是唯一对外提供的调用接口,负责排序的整体业务。 理解
2021-03-11
算法
#数据结构与算法
123…15

搜索

Hexo Fluid