自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 【无标题】

Redis Cluster(分片机制)分片集群(cluster):解决海量存储和高并发写的问题特点:集群中有多个master,每个master保存不同数据,每个master都可以有多个slave节点,保证高并发读无须哨兵机制,master之间互相通过ping检测彼此健康状态客户端请求可以访问任意节点,最终都会被转发到正确节点问题:集群中master宕机会发生什么?该实例与其他实例失去链接;发现疑似宕机;确定下线,提升slave为新的master问题:如何找到正确节点?

2022-05-27 12:03:55 74

原创 算法与数据结构_回溯算法例题

leetcode上的一道题给一个有 n 个结点的有向无环图,找到所有从 0 到 n-1 的路径并输出(不要求按顺序)二维数组的第 i 个数组中的单元都表示有向图中 i 号结点所能到达的下一些结点(译者注:有向图是有方向的,即规定了 a→b 你就不能从> b→a )空就是没有下一个结点了。示例 1:输入:graph = [[1,2],[3],[3],[]] 输出:[[0,1,3],[0,2,3]]解释:有两条路径 0 ->> 1 -> 3 和 0 -> 2 ->

2021-04-19 23:27:33 135

原创 Java并发_cas、aqs

总结来说,cas(compare and swap)按照字面意思就可以理解,每次都从某块内存区域拿到旧值和期望值进行比较,如果相等就修改为新值。如果不相等则会自旋( While(! compareAndSwap(old,current) ),这里放一下我学习自旋锁的网址https://blog.csdn.net/qq_34337272/article/details/81252853当然自旋锁会有两个问题:因为自旋锁是一种乐观锁,当期望值和内存值不相等时会一直保持自选状态,那么显然当线程竞争激烈

2021-04-18 04:14:41 216

原创 算法与数据结构_字符串_Kmp

Kmp是为了解决原字符串是否包含子字符串的问题,在这里记录一下Java的实现代码,并且分享一下学习Kmp的网址https://blog.sengxian.com/algorithms/kmppublic int[] getNextArray(String sonStr){ char[]son = sonStr.toCharArray(); int[]next = new int[son.length]; next[0] = -1; next[1] = 0; for(int i =2 ;i&

2021-04-16 20:15:20 61

原创 算法与数据结构_动态规划_打家劫舍

leetcode上一道算是很经典的动态规划题,在这里总结一下。原题:你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。动态规划的关键是要考虑到状态变化方程:因为两间相邻的房屋不能在同一晚上被小偷闯入,那么dp[ i ]就有两种情况,偷还是不偷第 i 个房间:(1

2021-04-16 00:40:17 73

原创 算法与数据结构_树_判断有效二叉搜索树

依旧是leetcode medium:给定一个二叉树,判断其是否是一个有效的二叉搜索树。其实只要知道有效的二叉搜索树的中序遍历一定是严格升序的就可以了。有三种方法:直接递归这个方法并没有依赖于升序这个条件,需要考虑到二叉搜索树的节点值一定在某个范围内(例如下面的这颗树,4必须大于3而小于5,即4这个右孩子不能只考虑比父节点大,这也是我做错的原因…)53 71 4 6 9long min =Long.MIN_VALUE;long max =Long.MAX_VALUE;

2021-04-13 00:41:34 334

原创 算法与数据结构_树_生成所有二叉搜索树和树的个数

leetcode一道medium题: 给定一个整数 n,生成所有由 1 … n 为节点所组成的 二叉搜索树 。在这里自我总结分析一下。生成一颗二叉搜索树public TreeNode generateOne(int n){ return generate(1,n);}public TreeNode generate(int start,int end){ if(start > end) return null; //mid其实可以为任意数字 int mid = (start+end

2021-04-12 20:48:12 146

原创 算法与数据结构_树_关于翻转树的两种递归

leetcode上刷到一道翻转树的问题,我的递归和答案的递归正好是两种思路,在这里总结一下。我的递归,实际上是自顶向下(先操作,再递归)public TreeNode inverseTree(TreeNode root){ inverse(root); return root;}public void inverse(TreeNode root){ if(root == null || (root.left ==null && root.right ==null)) ret

2021-04-12 13:58:12 52

原创 算法与数据结构_树_二叉树中序遍历的三种方法

s

2021-04-12 01:29:04 52

原创 算法与数据结构_7_基数排序

public static void RadixSort(int[]arr){ //定义10个桶代表0-9 int[][]bucket=new int[10][arr.length]; //表示每个桶里有多少个数 int[]bucketElementsCount=new int[10]; //最大的数有几位 int max =arr[0]; for(int i =0;i<arr.length;i++){ if(arr[i]>max){ max=arr[i]; } }

2021-04-04 01:37:43 39

原创 算法与数据结构_6_归并排序

public static void MergeSort(int[]arr,int left, int right,int[]temp){ if(left<right){ int mid=(left+right)/2; MergeSort(arr,left,mid,temp); MergeSort(arr,mid+1,right,temp); merge(arr,left,mid,right,temp); }}public static void merge(int[]a

2021-04-04 00:37:18 87

原创 算法与数据结构_5_快速排序

public static void QuickSort(int[]arr,int left, int right){ int l = left; int r = right; int temp; int mid =arr[(l+r)/2]; while(l<r){ while(arr[l] < mid){ l++; } while(arr[r] > mid){ r--; } if(l==r){ break; } temp = arr

2021-04-03 23:32:31 46

原创 算法与数据结构_4_希尔排序

马上要实习面试了,总结和分析一下算法与数据结构。希尔排序其实就是有步长的插入排序,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组的值越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。时间复杂度来说比直接插入排序要好很多,因此比O(n²)要小。public static void ShellSort(int[]arr){ int length =arr.length; int min; for(int step = length/2; step>=1 ; step/=

2021-04-03 21:24:57 55

原创 算法与数据结构_3_选择排序

public static void SelectSort(int[]arr){ int length = arr.length; int min;//存储最小的数 int index;//存储最小的数所在索引 //前length-1个数已经排好了,最后一个数肯定在正确的位子上 //所以只需要length-1轮循环 for(int i = 0 ; i< length-1 ; i++){ min = arr[i]; index = i; //找到最小的数 for(int j

2021-04-03 20:52:27 42

原创 算法与数据结构_2_插入排序

马上要实习面试了,总结和分析一下算法与数据结构。插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。如果已经是顺序,那么每次只需要和前面一个数进行比较,最好的时间复杂度是O(n)。如果完全反序,那么共需要1+2+..+n-1次比较,最差的时间复杂度是O(n²)public static void InsertSort(int[]arr){ in

2021-04-03 20:19:57 38

原创 算法与数据结构_1_冒泡排序

算法与数据结构_1_冒泡排序马上要实习面试了,总结和分析一下算法与数据结构。冒泡排序依次比较两个相邻的元素,如果从小到大排列,那么越大的数就会慢慢浮现。如果已经是顺序,那么一次都不需要交换,最好的时间复杂度是O(n)。如果完全反序,那么外层循环需要n-1轮,内层循环需要n-1-i轮,最差的时间复杂度是O(n²)```java```public static void BubbleSort(int[]arr){ int length = arr.length;//数组长度 int temp

2021-04-03 19:29:40 42

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除