摘要:归并排序 首先简单复习一下归并排序 class Solution { public void divide(int[] nums,int l,int r){ if(l < r){ int mid = (r + l) / 2; divide(nums,l,mid); divide(nums,mid +
阅读全文
随笔分类 - 数据结构与算法
摘要:题目来源:排序链表 就是对链表进行排序,题目中另外一个要求就是使用$O(nlogn)$时间复杂度的算法,对于链表排序,比较好的办法就是递归排序 基本的算法流程如下 确定链表中点(可以使用快慢指针法) 将链表对半分,分别排序 有序链表合并 1、快慢指针 对于一个链表,想要获取其中点,可以定义两个指针,
阅读全文
摘要:题目来源:合并两个有序链表 两个链表有序,这个很类似于归并排序的归并过程,但是数组的归并过程会创建一个临时数组,这里如果创建一个临时链表开销就比较大了,因此需要考虑原地排序算法 非递归方案 首先我们定义一个ans节点,用来保存排序后的头节点 然后定义一个prev节点,表示经过排序后的当前节点 首先比
阅读全文
摘要:最大正方形 首先说一下暴力方法,就是对于每一个元素,如果是1,那么就判断他的左上角是不是1,如果是,就扩展这个正方形,查看对应的一列和一行是不是全都是1,如果是就继续扩展 暴力法 虽然说我用的是动态规划,但是本质上还是暴力搜索 class Solution { public: int maximal
阅读全文
摘要:并查集 并查集的作用就是为了快速判断两个结点是否是联通的,可以用来判断公共祖先等问题 并查集主要的任务就是维护find和union函数 public class UnionFind { public int[] root; public UnionFind(int Size){ root = new
阅读全文
浙公网安备 33010602011771号