
数据结构与算法
文章平均质量分 65
午夜.幽魂.男
每个优秀的人,都有一段沉默的时光,那段时光是付出了很多努力,却得不到结果的日子,我们把它叫做扎根。
展开
-
Dubbo一致性哈希负载均衡算法
第一节:哈希算法本小节主要是为了介绍一致性哈希算法做铺垫。简单的介绍了哈希算法解决了什么问题,带来了什么问题。第二节:一致性哈希算法本小节主要是通过作图对一致性哈希进行了简单的介绍。介绍了一致性哈希是怎么解决哈希算法带来的问题,怎么解决数据倾斜的问题。第三节:一致性哈希算法在Dubbo中的应用本小节是全文重点,通过一个"骚"操作,对Dubbo一致性哈希算法的源码进行了十分详细的剖析。从整个类到类里面的每个方法进行了详尽的分析,打印了大量的日志,配合图片,方便读者理解。第四节:我又发现了一个Bug转载 2021-09-17 09:01:35 · 638 阅读 · 0 评论 -
八种排序算法总结
选择排序和冒泡排序原创 2018-11-09 10:15:21 · 156 阅读 · 0 评论 -
socket编程到底是什么?
Socket就是插座 端口就是插座上的孔, 端口不能被其他进程占用,抽象理解Socket类似于操作某个IP地址上的某个端口达到点对点通信的目的,需要绑定到某个具体的进程中和端口中,...原创 2019-08-07 16:27:54 · 528 阅读 · 0 评论 -
连续子向量的最大和
int f(int[] arr){ List<Integer> list = new ArrayList<>(); //遍历数组 for (int i = 0; i < arr.length; i++) { int sum = 0; //j作为它的累计求和的变量循环剩下的数...原创 2019-08-19 22:18:17 · 96 阅读 · 0 评论 -
leetcode [384] 打乱数组
水仙花public class Shuixianghua { List f(int start, int end) { List<Integer> list = new ArrayList<>(); int j = 0; for(int i = start; i <= end; i++) { if(i == Math.pow(Mat...原创 2019-08-21 17:52:25 · 133 阅读 · 0 评论 -
算法 - lru(最近最少使用)
需求:抽离出一个用户系统,向各个业务系统提供用户的基本信息。解决:创建数据库的缓存层。该缓存层会移除最近最少被使用的数据,当缓存层数据所占内存达到一定阈值。作用:移除最近最少被使用的数据,当缓存层数据所占内存达到一定阈值。哈希链表:场景:按照最后的使用时间来排序,依靠哈希链表的有序性,作用:使无序的哈希表拥有了固定的排列顺序。key-value被一个链条串了起来。具有它的前驱Key-Va...原创 2019-08-26 18:22:07 · 373 阅读 · 0 评论 -
链表判断有环 单链表反转
判断链表是否有环方法:定义一个临时变量引用指向当前的节点,定义一个hashmap。key与value当时当前的节点。该节点存在于hashmap中,node.get(tmp) ,则确定有环, 没有就存放该的节点。 public static boolean hasLoop2(Node n){ Node temp1 = n; //定义一个临时变量引用指向当前节点 ...原创 2019-08-29 02:33:49 · 130 阅读 · 0 评论 -
Integer.toString的源码
链上科技面试问int转化成String 即 Integer.toString的源码解析实现:字符数组digits,36位,package string_to_int;import cn.hutool.core.util.ObjectUtil;import cn.hutool.core.util.StrUtil;/* * created by sj 2019年8月29日 */...原创 2019-08-29 17:19:35 · 372 阅读 · 0 评论 -
八皇后问题?(回溯思想)
8X8的棋盘上放置8个皇后,任意两个皇后都不在同一条横线、竖线、斜线。如:一个皇后在棋盘上的“封锁范围”(绿色格子),其他皇后不能放置在在这些格子;两个皇后在棋盘上的“封锁范围”,其他皇后不得放置在这些格子:第一行开始尝试摆放第一个皇后,摆放成功后,递归一层,再遵循规则在棋盘第二行来摆放第二个皇后。如果当前位置无法摆放,则向右移动一格再次尝试,如果摆放成功,则继续递归一层,摆放第三个皇后…...转载 2019-09-06 21:00:23 · 527 阅读 · 0 评论 -
算法 - 二路归并
将两个有序的整型数组合并成一个新的有序数组且不能有重复元素。代码实现:public static int[] mergeArr(int[] arr1, int[] arr2) { // 变量存储两个数组中被比较的索引 int index1 = 0; int index2 = 0; int[] res = new int[arr1.length+arr2.length]; for (i...原创 2019-08-07 09:14:51 · 147 阅读 · 0 评论 -
统计字符串中英文字母、数字、空格和其他字符的个数
统计字符串中英文字母、数字、空格、其他字符的个数? public static void countNum(String str) { int count1 = 0; int count2 = 0; int count3 = 0; int count4 = 0; int len = str.length(); for (int i = 0; i < len...原创 2019-08-07 00:27:02 · 4515 阅读 · 1 评论 -
算法 二叉树的最大深度
算法 - 二叉树的深度计算package singleton;/* * created by sj 2019年8月18日 */public class T { int f(Node root) { if(root == null) return 0; int a = f(root.left)+1; int b = f(root.right)+1; return a>...原创 2019-08-18 18:03:47 · 497 阅读 · 0 评论 -
初级算法汇总
数组拥有非常高效的随机访问能力,只要给出下标,就可以用常量时间找到对应元素。有一种高效查找元素的算法叫作二分查找,就是利用了数组这个优势。至于数组的劣势,体现在插入和删除元素方面。由于数组元素连续紧密地存储在内存中,插入、删除元素都会导致大量元素被迫移动,影响效率。总的来说,数组所适合的是读操作多、写操作少的场景。package chapter2.part1;/** * Created...原创 2021-10-18 14:08:50 · 229 阅读 · 0 评论 -
数组 优势和劣势
数组的优势和劣势优势数组拥有非常高效的随机访问能力,只要给出下标,就可以用常量时间找到对应元素。有一种高效查找元素的算法叫作二分查找,就是利用了数组这个优势。劣势至于数组的劣势,体现在插入和删除元素方面。由于数组元素连续紧密地存储在内存中,插入、删除元素都会导致大量元素被迫移动,影响效率。总结总的来说,数组所适合的是读操作多、写操作少的场景。...原创 2019-07-11 10:36:19 · 1900 阅读 · 0 评论 -
算法 时间复杂度
算法的基本概念算法是对特定问题求解步骤的一种描述,它是指令的优先序列,其中的每条指令表示一个或多个操作。具有以下性质:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都可在有穷时间内完成确定性:算法中每条指令必须有确切的含义,不会产生二义性,对于相同的输入只能得出相同的输出。可行性:一个算法有零个或多个输入,这些输入取自于某个特定的对象的集合。输入:一个算法有零个或多个输入,这些...原创 2019-07-16 12:08:53 · 245 阅读 · 0 评论 -
动态规划思想
内聚性内聚性又称块内联系。指模块的功能强度的度量,及一个模块内部各个元素彼此结合的精密程度的度量。若一个模块内各元素(语名之间,程序段之间的联系越紧密,则它的内聚性就越高。所谓高内聚是指一个软件模块是有相关性很强的代码组成、只负责一项任务,也就是常说的单一责任原则。偶然内聚:一个模块内的各处理元素之间没有任何联系,只是偶然的凑到一起。逻辑内聚:这种模块把几种相关的功能组合在一起,每次被...原创 2019-07-23 16:34:32 · 239 阅读 · 0 评论 -
bfs 宽度优先搜索
Breadth First Search 宽度优先搜索原创 2019-07-17 15:59:49 · 118 阅读 · 0 评论 -
二叉树 DFS BFS
堆排序相关知识原创 2019-07-22 11:35:06 · 290 阅读 · 0 评论 -
红黑树 插入过程(图解)
二叉查找树(BST)具备什么特性呢?左子树上所有节点的值均小于或等于他的根节点的值。,右子树上所有节点的值均大于或等于它的根节点的值。左、右子树也分别为二叉排序树。这种方式正是二分查找的思想,查找所需的最大次数等同于二叉查找树的高度。红黑树是一种自平衡的二叉查找树。除了符合二叉查找树的基本特性外,它还具有下列的附加特性:节点是红色或黑色根节点是黑色每个叶子结点都是黑色的空节点...原创 2019-07-31 16:19:04 · 564 阅读 · 0 评论 -
leetcode【1】 两数之和
public static int getGreatestCommonDivisor(int a,int b) { int big = a>b?a:b; int small = a<b?a:b; if(big%small==0) { return small; } for(int i = small/2; i>i;i--) { if(small%...原创 2019-08-06 19:43:53 · 141 阅读 · 0 评论 -
什么是递归
递归递归,就是在运行的过程中调用自己。构成递归需具备的条件:子问题须与原始问题为同样的事,且更为简单;不能无限制地调用本身,须有个出口,化简为非递归状况处理。在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。...原创 2019-06-24 10:19:09 · 117 阅读 · 0 评论