
算法
文章平均质量分 55
一只小小狗
大家好我是练习时长2年半的程序员
展开
-
雪花算法导致ID生成一致问题
雪花算法(Snowflake Algorithm)是 Twitter 开发的一种用于生成全局唯一 ID 的算法。节点 ID 重复:雪花算法依赖于节点 ID(包括数据中心 ID 和工作机器 ID)来区分不同的节点。如果多个节点使用了相同的节点 ID,它们可能会生成重复的 ID。在多机部署的情况下,一定要对数据中心 ID 和工作机器 ID进行固定的配置,才可以避免生成相同的ID。,欢迎大家加入我的开源项目,或者(在我的主页联系我)加入你们的开源项目,点点Github-Stars。原创 2023-12-06 19:37:28 · 1928 阅读 · 0 评论 -
将二进制数字反转(190) 逐位颠倒 和 位运算分治
代码】将二进制数字反转(190) 逐位颠倒 和 位运算分治。原创 2022-08-14 20:47:05 · 330 阅读 · 0 评论 -
模拟穷举 731. 我的日程安排表 II
如果出现了三个线段在一个时段出现了,则就是三重。原创 2022-07-20 14:00:16 · 90 阅读 · 0 评论 -
线段树-区间修改树
提供三种方法在选择的区间上一同加V在选择的区间上一同修改成V获取区间中的总和。原创 2022-07-20 13:28:09 · 139 阅读 · 0 评论 -
dfs 牛客 迷宫问题
输入描述输入两个整数,分别表示二维数组的行数,列数。再输入相应的数组,其中的1表示墙壁,0表示可以走的路。数据保证有唯一解,不考虑有多解的情况,即迷宫只有一条通道。输出描述左上角到右下角的最短路径,格式如样例所示。...原创 2022-07-18 17:27:02 · 394 阅读 · 0 评论 -
二分查找 33. 搜索旋转排序数组
例如,[0,1,2,4,5,6,7]在下标3处经旋转后可能变为[4,5,6,7,0,1,2]。给你旋转后的数组nums和一个整数target,如果nums中存在这个目标值target,则返回它的下标,否则返回-1。你必须设计一个时间复杂度为O(logn)的算法解决此问题。...原创 2022-07-18 16:12:13 · 175 阅读 · 0 评论 -
0-1背包问题
标准的01背包装满最大价值是多少?i 表示列长,也就是出现的不同物品j 表示行长,但是此时的行,为装了不同重量的可能性,也就是说0没装也是有可能的,所以(j = 最大重量 + 1)而对应的dp[i][j] 里存放的是 价值。1.3 一维数组实现如有错误欢迎指正...原创 2022-07-07 16:50:20 · 113 阅读 · 0 评论 -
master公式
用来利用分治策略来解决问题经常使用的时间复杂度的分析方法。分治策略的递归解法有两个常用的方法:代入法 ,递归树法。分治策略中递归来求解问题分为三步:分解、解决,合并。主方法公式:其中n表示问题的规模,即总样本数,a表示递归的次数,即生成的子问题数,b表示每次递归是原来的n/b之一个规模,d表示额外操作的次数,T (N^d)表剩余时间复杂度。解法:①当dlogb a时,时间...原创 2022-06-26 20:48:52 · 257 阅读 · 0 评论 -
二分查找——三种问题模板
二分查找的基本思想是将 n 个元素分成大致相等的两部分,取 a[n/2]a[n/2] 与 x 做比较:如果 x=a[n/2]x=a[n/2] , 则找到 x , 算法中止如果 xa[n/2] , 则只需要在数组 a 的右半部分继续搜索 x总共有 n 个元素,渐渐跟下去就是 n, n/2 , n/4 ,… k接下来操作元素的剩余个数),其中 k 就是循环的次数O(n)=O(logn)当出现以下条件时,......原创 2022-06-19 17:56:24 · 411 阅读 · 0 评论 -
(桶排序、计数排序、基数排序)线性排序:如何根据年龄给100万用户数据排序?
(桶排序、计数排序、基数排序)线性排序:如何根据年龄给100万用户数据排序?桶排序(Bucket sort)使用场景案例 亿计数据唯一性多字段去重(Java具体操作)计数排序(Counting sort)基数排序(Radix sort)如何根据年龄给100万用户数据排序?桶排序(Bucket sort)将数据分到不同多个桶中,进行排序。桶本身就有大小之分。如果根据 hashcode值进行分桶,会较为均匀的分布在每一个桶中,这时的时间复杂度为O(n),但是当所有值都进入了一个桶中,分桶的意义就会消失原创 2022-05-19 17:20:38 · 313 阅读 · 0 评论 -
如何用快排思想在O(n)内查找第K大元素?快排更好用?(归并排序、快速排序,常用大量数据的排序)
如何用快排思想在O(n)内查找第K大元素?(归并排序、快速排序)归并排序快速排序为什么多使用是快排归并排序package sorts;public class MergeSort { // 归并排序算法, a是数组,n表示数组大小 public static void mergeSort(int[] a, int n) { mergeSortInternally(a, 0, n-1); } // 递归调用函数 private static void merge原创 2022-05-13 13:46:10 · 140 阅读 · 0 评论 -
为什么插入排序比冒泡排序更受欢迎?(小规模数据量排序算法:冒泡、插入、选择)
为什么插入排序比冒泡排序更受欢迎?(而选择排序又不做考虑)排序算法的执行效率 考虑方向(排序)稳定性冒泡排序常见8种排序算法排序算法时间复杂度基于比较冒泡排序、插入排序、选择排序O(n^2)是快速排序、归并排序O(nlogn)是桶排序、计数排序、基数排序O(n)否排序算法的执行效率 考虑方向最坏时间复杂度、最好时间复杂度、平均时间复杂度两个相同最坏时间复杂度的,可能最好时间复杂度不一致,导致性能有所偏差。时间复杂度的系数、常数 、低阶在原创 2022-05-12 17:04:03 · 556 阅读 · 0 评论 -
算法:动态规划学习笔记
1.递归+记忆化 -> 递推2.状态的定义:opt[n],dp[n],fib[n]3.状态转移方程:opt[n]=best_of(opt[n-1],opt[n-2],...)4.最有子结构斐波那契数列f(n) = f(n-1)+f(n-2) 最优为o(n)Count The Paths逆推O(m*n)原创 2022-04-13 17:44:33 · 878 阅读 · 0 评论 -
java文本相似度算法
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import java.util.stream.Collectors;import org.apache.commons.collections4.SetUtils;/**文本相似度相关判断方法参考链接:https://zhuanlan.zhihu.com/p原创 2022-04-02 15:01:42 · 4248 阅读 · 1 评论 -
Kafka 生产者压缩算法是什么?何时压缩和解压?什么压缩性能好?
生产者压缩算法是什么?何时压缩?什么压缩性能好?何时压缩?在Broker和topic也可以配置Broker 端指定了和 Producer 端不同的压缩算法。Broker 端发生了消息格式转换。何时解压缩?什么压缩性能好?压缩(compression)是为了节省空间,并且减少I/O传输量。希望以较小的 CPU 开销带来更少的磁盘占用或更少的网络 I/O 传输。何时压缩?Kafka 中,压缩可能发生在两个地方:生产者端和 Broker 端。如果在生产者段定义压缩方式就这样写,开启GZIP压缩算法。官网原创 2022-03-18 16:47:11 · 1608 阅读 · 0 评论 -
布隆过滤器 使用测试(Google Guava)
布隆过滤器 使用测试Google Guava一、简介二、原理布隆过滤器添加元素布隆过滤器查询元素三、使用Google Guava的BloomFilter添加依赖代码案例测试 当改变预估数时候对真实误判率的影响应用场景一、简介布隆过滤器(Bloom Filter),以空间换时间的算法。布隆过滤器由布隆在 1970 年提出。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。优点 空间效率和查询时间缺点 有一定的误识别率和删除困难二、原理假如有原创 2022-03-18 14:16:24 · 1327 阅读 · 0 评论 -
10亿手机号如何去重?(BitMap)
10亿手机号如何去重方案一使用数组方案二使用HashSet方案三BitMapjava.util.BitSet分桶理论方案一使用数组一个数组存入10亿数据,第一位手机号一定为1则忽略。如果存储的是String类型 存储10e个 需要9.5GB左右。如果存储的是Long类型 存储10e个 需要7.5GB左右。进行for循环运算效率很低,内存占用很大。方案二使用HashSetHashSet底层使用HashMap,需要记录hash值、value、key、next节点等各种各样的东西。消耗内存可想而知原创 2022-03-17 00:34:57 · 3453 阅读 · 0 评论 -
java 解决双重for循环效率问题
解决双重for循环效率问题题目说明题解题目说明当拥有2个表时,订单表和物品表 时,订单表(客户名称,订单ID)和物品表(订单ID,物品名称)一个客户可以购买多个物品,但是他们的订单ID是唯一的,数据库中数据以JSON字符串的形式传给你。订单表订单ID客户名称A1B2C3……物品表订单ID物品名称A1B2C3……请输出购买最多商品的人?购买最少商品的人?和平均一个人购买多少商品。题解1.解决原创 2021-07-20 14:13:05 · 2772 阅读 · 0 评论 -
算法的时间与空间复杂度
算法的时间与空间复杂度如何去衡量不同算法之间的优劣呢?时间复杂度空间复杂度算法(Algorithm)是指用来操作数据、解决程序问题的一组方法。对于同一个问题,使用不同的算法,也许最终得到的结果是一样的,但在过程中消耗的资源和时间却会有很大的区别。如何去衡量不同算法之间的优劣呢?主要还是从算法所占用的「时间」和「空间」两个维度去考量。时间维度:是指执行当前算法所消耗的时间,我们通常用「时间复杂度」来描述。空间维度:是指执行当前算法需要占用多少内存空间,我们通常用「空间复杂度」来描述。而算法原创 2021-04-14 14:20:55 · 299 阅读 · 1 评论 -
快速排序(java实现)
快速排序(java实现)时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度空间复杂度稳定性复杂性快速排序O(nlog2n)O(n2)O(nlog2n)O(nlog2n)不稳定较简单public static void quick(int[] arr,int left,int right){ //首先确保传入数组 不为空 if(arr==null||arr.length==0){ return; } //确保 左右下标值符合要求 i原创 2020-11-21 14:28:25 · 964 阅读 · 3 评论 -
插入排序(JAVA实现)
插入排序(JAVA实现)时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度空间复杂度稳定性复杂性插入排序O(n2)O(n2)O(n)O(1)稳定简单public static int[] insertSort(int[] arr) throws Exception{ // 从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的 for (int i = 1; i < arr.length;原创 2020-11-21 13:41:08 · 98 阅读 · 1 评论 -
选择排序(java实现)
选择排序(java实现)时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度空间复杂度稳定性复杂性选择排序O(n2)O(n2)O(n2)O(1)不稳定简单/** * 选择排序*/public static int[] selectSort(int[] arr){ //需要交换n-1轮 for(int i=0;i<arr.length-1;i++){ //需要一个来标识最小下标 int min = i; //需要比较次数原创 2020-11-21 13:28:40 · 179 阅读 · 0 评论 -
冒泡排序(JAVA实现)
冒泡排序(JAVA实现)时间复杂度(平均)时间复杂度(最坏)时间复杂度(最好)空间复杂度空间复杂度稳定性复杂性冒泡排序O(n2)O(n2)O(n)O(1)稳定简单 /** * 冒泡排序 */ public static int[] bubblerSort(int[] arr) { int temp = -1; for (int i = 0; i < arr.length-1; i++) { for (int j = 0; j &l原创 2020-11-21 12:51:20 · 75 阅读 · 0 评论 -
递归技巧:n的阶层和斐波那契数列
简单递归面对递归算法,最重要的是出口,如何寻找出口。1. n!划定范围后,找出口,出口就在当 n1 或者 n0时。public static int getJC(int n){ if(n<0){ throw new Exception("参数非法"); } if(n==1||n==0){ return 1; } return getJC(n-1)*n;}2. 斐波那契数列1 1 2 3 5 8 13 下一项是前两项之和 从第三个开始,也就是说出口在 1 和2publ原创 2020-11-01 15:35:45 · 547 阅读 · 0 评论