算法
文章平均质量分 90
MIMOCH
桃李春风一杯酒,江湖夜雨十年灯,未来可期....
展开
-
合并两个有序数组
给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。说明:初始化 nums1 和 nums2 的元素数量分别为 m 和 n。你可以假设 nums1 有足够的空间(空间大小大于或等于 m + n)来保存 nums2 中的元素。示例:输入:nums1 = [1,2,3,0,0,0], m = 3nums2 = [2,...原创 2019-04-16 17:13:43 · 233 阅读 · 0 评论 -
常用排序算法(冒泡,选择,插入)
排序算法及其优化1.冒泡算法原算法时间复杂度: O(n^2)空间复杂度: O(1)稳定性 :稳定排序思想 : 每趟排序将从头开始两两比较,按照大的在后小的在前的顺序进行交换,每趟可以确定最大的数在数组的末尾,需要遍历N趟,每次遍历(N-i)次. public static <T extends Comparable<T>> void...原创 2019-07-27 22:08:20 · 162 阅读 · 0 评论 -
Java实现LRU
Java实现LRU简介LRU(Least Recent Used) 最近最少使用,是经常用在内存的调度算法,在内存不够的情况下,为了载入新内容,不断淘汰旧内容.实现原理使用HashMap 和 双向链表实现 LRUHashMap的 put 和 get 都是接近O(1),用HashMap的vlaue指向双向链表的Node节点的Index.双向链表在这里用来实现LRU存储,head代表头部,...原创 2019-07-29 21:00:37 · 220 阅读 · 0 评论 -
AVL 自平衡二叉搜索树 (Adelson-Velskii and Landis)[一]
简介BST退化: 在添加一组递增元素时,BST会退化成一个链表,查询效率降低为O(n).AVL是为了解决BST 退化而造成的查询效率降低的问题,最主要对BST进行了结构性的改变(进行旋转).平衡: 节点的左右子树高度之差不能超过1.AVL树的最差.最好.平均的增删插的时间复杂度为 O(log<2> N).AVL的最差情况下,增删查需要旋转树的高度次 O(log<2>...原创 2019-07-11 16:05:10 · 691 阅读 · 0 评论 -
BST 二叉搜索树 (binary Search Tree )[三]
10.求data1和data2的最近公共祖先节点 ,并返回它的值由于其最近公共祖先节点一定介于 data1 与 data 2 之间可以不断对当前节点的data与之比较,从而降低规模 public T getLCA(T data1, T data2) { if (root == null) { return null; } ...原创 2019-07-09 19:52:09 · 188 阅读 · 0 评论 -
BST 二叉搜索树 (binary Search Tree )[二]
1. BST非递归插入首先通过不断比较,找到cur == null 情况下的cur的父节点(parent)再经过和其父亲节点的data比较然后再将其插入到孩子域中public void non_insert(T data) { if (this.root == null) { root = new BSTNode<>(data, null, nul...原创 2019-07-07 20:33:24 · 202 阅读 · 0 评论 -
排序算法之 堆排序
简介堆是完全二叉树(对应满二叉树,每个节点的序号一一对应)每个结点都大于或者等于左右子结点的值称为大顶堆每个结点都小于或者等于左右子节点的值称为小顶堆堆排序是不稳定排序 稳定性问题以后讨论排序思想(大顶堆),小顶堆类似首先通过要排序数组构造大顶堆(这一步可以将数组的最大值放在数组的首位)交换数组的首尾元素数组的长度减一继续构造大顶堆,重复2得到由小到大排序的数组(大顶堆...原创 2019-06-23 20:27:30 · 237 阅读 · 0 评论 -
BST 二叉搜索树 (binary Search Tree )[一]
简介二叉搜索树是一种特殊的二叉树 在我看来感觉象将二分查找图像化.满足以下条件 :每个节点最多有两个孩子每个节点的值,都大于左孩子,而小于右孩子特点首先在每一层上二叉树的节点最大为 2^(i-1) (i为层数).二叉树的深度为k = [log2(n)]+1(n为总的节点个数).代码BSTNode值得注意的是 :get和set方法直接生成就好定义左右孩...原创 2019-06-23 00:54:28 · 268 阅读 · 0 评论 -
二叉树的创建以及三种遍历方式
二叉树的创建 :TreeNode:public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}BitTreeimport java.ut...原创 2019-06-16 16:35:37 · 400 阅读 · 0 评论 -
用泛型实现单链表
节点代码public class Entry<T> { private T value; //保存当前节点保存的值 private Entry<T> next; //保存下一个节点 public Entry(T value, Entry<T> next) { this.next = next; th...原创 2019-05-17 18:14:26 · 388 阅读 · 0 评论 -
剑指offer - 替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。解题思想1 .暴力破解 . 遇到空格就将后面字符全部向后移动,这样会造成重复移动的问题,时间复杂度O(n2)2.首先将字符串中的空格个数计算出来,然后将原来的字符串长度增长,从末尾开始进行遍历,遇到空格就替换,其他元素就复制,...原创 2019-05-26 15:26:57 · 196 阅读 · 0 评论 -
剑指offer - 求1+2+3+...+n
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。分析 :代码:public static int Sum_Solution(int n) { int ans = n; boolean t = ((ans != 0) && ((ans += Su...原创 2019-05-25 14:13:53 · 259 阅读 · 0 评论 -
KMP算法初步解析
KMP算法 : 解决的是串匹配问题next数组的求解主要代码求解next : public static int[] getnext(char[] str2) { int n = str2.length; int i = 0; int[] next = new int[str2.length]; next[0] = ...原创 2019-05-24 16:49:45 · 199 阅读 · 0 评论 -
双向链表的实现
双向链表:/** * TODO : 双向链表的实现 * * @param <T> */public class DoubleLinkList<T> { Entry<T> head; public DoubleLinkList() { head = new Entry<>(null, null, null...原创 2019-05-19 01:11:42 · 213 阅读 · 0 评论 -
Java实现单链表
节点:public class Entry { private int value; //保存当前节点的值 private Entry next; //保存的是下一个节点 public Entry(int value){ this.value = value ; } public Entry(){} publ...原创 2019-05-02 13:22:16 · 184 阅读 · 0 评论 -
Leetcode 169 : 求众数-一维数组里面最多的数
给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在众数。示例 1:输入: [3,2,3]输出: 3示例 2:输入: [2,2,1,1,1,2,2]输出: 2编程思想:简单来讲:就是相互抵消(摩尔投票法) 实现的前提是在数组必然有一个数是众数,也就是说这个数组中一定有一个数出现的次数大...原创 2019-04-18 13:36:17 · 1047 阅读 · 0 评论 -
常用排序算法(希尔,归并,快排)
4. 希尔排序时间复杂度 : O(n^1.3) ~ O(n^1.5)空间复杂度 : O(1)稳定性 : 不稳定(因为在交换的过程中,有跳跃交换,所以不稳定)算法思想 :希尔排序是插入排序的优化版本,由于简单插入排序的只能交换相邻元素,所以每次只能将逆序对数减1,它通过交换不相邻的元素, 使得每次将逆序对数量减小大于1.首先将数组元素按照h=4间距分为数对,然后在这些数对之间进行一次插...原创 2019-09-08 12:52:17 · 383 阅读 · 0 评论