- 博客(38)
- 收藏
- 关注
原创 二位差分矩阵
本文介绍了利用二维差分矩阵高效处理子矩阵区间修改的方法。通过建立差分数组与原矩阵的转换关系,实现对子矩阵的快速加减操作。该方法通过insert函数修改差分数组,再用前缀和还原最终矩阵。时间复杂度为O(nm + q),适用于大量区间修改的场景,相比暴力解法更高效,但需要额外O(nm)空间存储差分数组。适用于子矩阵修改但不适合区间查询等其他操作。
2025-07-03 17:50:16
906
原创 一维差分计算
差分是一种高效处理区间增减操作的技术。通过构建差分数组,将区间操作转化为两次单点修改:在区间起始位置加c,在区间结束位置后减c。完成所有操作后,通过前缀和还原得到最终结果。这种方法将区间操作的时间复杂度从O(n)降至O(1),总体复杂度从O(mn)优化为O(n+m)。适用于需要频繁区间修改的场景,但需额外存储差分数组,且主要适用于仅需最终结果的场景。示例展示了如何用差分高效处理序列的批量区间加法操作。
2025-07-03 17:49:30
356
原创 高精度除法
摘要: 本文介绍了高精度除法算法,用于计算两个非负整数字符串A和B的商和余数。算法通过预处理将字符串转换为数组,模拟手工除法过程逐位计算商和余数。时间复杂度为O(m+n),空间复杂度为O(m)。实现直观但存在整数溢出风险和大数处理限制。示例展示了对"123"÷"4"的计算过程,结果为商30余3。该方法适合中等规模数据,但处理极大数时需优化。
2025-06-30 01:30:29
629
原创 高精度乘法
摘要:本文实现了一种简化的大数乘法算法,用于计算两个非负整数(字符串形式)的乘积。方法将第一个数拆分存储,第二个数转换为整数,通过逐位相乘并处理进位完成计算。该算法时间复杂度为O(m+n),空间复杂度为O(m),适合处理中小规模计算。优点是实现简单直观,但存在整数溢出风险和大数处理效率不足的缺点,不适用于超大规模乘法运算。
2025-06-30 01:29:56
430
原创 子矩阵的和
本文介绍了利用二维前缀和数组高效计算子矩阵和的方法。通过构建前缀和数组s[i][j]表示从(0,0)到(i,j)的子矩阵和,将子矩阵求和问题转化为O(1)时间的简单运算。具体实现时,预处理阶段用O(n×m)时间构建前缀和数组,查询阶段只需s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1]即可得到任意子矩阵和。该方法将q次查询的时间复杂度从O(q×n×m)优化到O(n×m+q),特别适合多次查询场景,但需要O(n×m)额外存储空间。文中给出了Java实现代码,并通过
2025-06-30 01:13:37
721
原创 前缀和计算
摘要:本文介绍了使用前缀和数组高效计算区间和的方法。核心思想是预处理构建前缀和数组s,其中s[i]表示原数组前i项的和。查询时通过s[r]-s[l]+arr[l]快速得到区间[l,r]的和。该方法预处理时间复杂度为O(n),查询时间为O(1),适用于查询次数多但数组稳定的场景。示例展示了从数组[1,3,5,7,9]计算多个区间和的过程。该方法显著提升了多次查询的效率(O(n+m)),但需要O(n)额外空间,且对频繁修改的数组维护成本较高。
2025-06-30 01:13:05
1096
原创 高精度加法
本文探讨了大数加法的高精度计算方法,通过模拟竖式加法实现两个任意长度正整数的求和。方法核心包括:1)将输入字符串拆分为数字数组;2)逐位相加并处理进位;3)构建结果字符串。该算法时间复杂度为O(n),空间复杂度为O(n),n为较长数字的位数。优点是思路清晰、不受位数限制,缺点是需要额外存储空间。文末以"123"+"4567"为例演示了计算过程,验证了方法的有效性。
2025-06-26 17:02:11
411
原创 高精度减法
本文介绍了一种高精度大数减法算法,通过模拟竖式减法实现任意长度正整数的减法运算。方法首先确定两个数的位数和结果符号,必要时交换减数与被减数,然后逐位相减并处理借位,最后构建结果字符串。其时间复杂度为O(n),空间复杂度为O(n)。优点是思路直观、能处理超长整数,缺点是需要较多内存。该方法适用于需要精确计算大数差值的场景,但性能可能不如更优化的算法。
2025-06-26 17:01:28
566
原创 数的范围(连续数字边界)
本文介绍了一种利用二分查找算法在有序数组中高效定位目标元素起始和终止位置的方法。通过两次二分查找(首次定位左边界,二次定位右边界),实现O(log n)的时间复杂度。代码通过调整中间点计算方式处理边界条件,并验证元素是否存在。举例说明查找过程,分析其低空间复杂度(O(1))的优势,同时指出该方法对数组有序性的依赖局限。适用于需快速查询重复元素范围的场景,如日志分析或统计应用。
2025-06-25 22:26:00
521
原创 数的三次方根
本文介绍了一种使用二分查找算法求解浮点数三次方根的方法。该方法通过设定初始搜索区间(-10000到10000),不断缩小范围直至满足精度要求(区间长度小于10^-8)。算法计算中间值的三次方,并根据与目标值的比较调整左右边界。该方法时间复杂度为对数级,空间复杂度为常数级,具有高效、易于实现的优点,但只能获得近似解且可能受浮点精度影响。文中以求解8的三次方根为例,演示了算法的执行过程。
2025-06-25 22:24:26
630
原创 逆序对的数量
本文介绍了利用归并排序思想计算数组中逆序对数量的方法。逆序对定义为i<j且a[i]>a[j]的元素对。该方法通过分解(二分数组)、递归排序子数组,并在合并过程中统计跨越子数组的逆序对数量。当左子数组元素大于右子数组元素时,逆序对数量增加mid-i+1。算法时间复杂度为O(n log n),空间复杂度为O(n)。以数组[3,1,2,4]为例,详细演示了分解、合并及逆序对统计过程,最终得出3个逆序对。该方法效率优于暴力解法,但需额外存储空间。
2025-06-25 16:53:43
439
原创 第k个数字
快速选择算法是基于快速排序思想的高效选择算法,用于在未排序数组中快速查找第k小的元素。其核心是通过基准元素划分数组,根据k值递归选择左半部分或右半部分继续查找。该算法平均时间复杂度为O(n),最坏情况下为O(n²)。示例展示了如何通过多次划分找到第3小的元素。优点是平均效率高,适用于大规模数据;缺点是存在最坏情况下的性能退化和不稳定性。算法实现使用双指针划分和递归处理,有效减少了不必要的排序操作。
2025-06-25 16:52:54
1119
原创 快速排序算法
快速排序是一种高效的分治排序算法,其核心思想是通过基准元素将数组分为两部分,分别递归排序。算法步骤包括:选择基准元素(通常为中间值)、划分数组(左边小于基准,右边大于基准)、递归处理子数组。代码实现中通过双指针进行元素交换,确保分区正确。快速排序平均时间复杂度为O(n log n),空间复杂度O(log n),但不稳定且最坏情况下可能退化到O(n²)。合理选择基准可优化性能,使其成为实际应用中高效的排序选择。
2025-06-25 16:51:51
593
原创 归并排序算法
摘要:归并排序是一种基于分治思想的稳定排序算法,时间复杂度为O(n log n)。其步骤包括分解数组至单个元素、递归排序子数组及合并有序子数组。代码通过临时数组实现合并逻辑。优点是稳定且性能较好,缺点是需要O(n)额外空间。示例展示了如何分解与合并数组,最终得到有序结果。
2025-06-25 16:49:48
521
原创 两个数组的交集 II
主要思路:首先对两个数组进行排序,然后从头使用双指针举例排序后的两个数组,指针为A、B当A<B的时候,A指针向后移动当A=B的时候,A、B指针都向后移动,并且保存共同的元素到集合中当A>B的时候,B指针向后移动这样持续到某一个数组遍历完成class Solution { public int[] intersect(int[] nums1, int[] nums2) { ArrayList<Integer> list = new Arra
2022-04-14 17:30:58
344
原创 只出现一次的数字
主要思路:通过异或运算,0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同为0,异为1),那么我们现在里面只有一个是单独的,其他的都是重复的两个,两个异或就会为0,最终就是0⊕单独数字=单独数字class Solution { public int singleNumber(int[] nums) { int len = nums.length; int res = 0; for(int i=0;i<len;i++){
2022-04-14 16:53:06
226
原创 存在重复元素
存在重复元素主要思路:思路一:数组排序,然后通过遍历看相邻两个元素是否相同class Solution { public boolean containsDuplicate(int[] nums) { int len = nums.length; if(len==0 || len==1){ return false; } Arrays.sort(nums); for(int i=1;i&
2022-04-11 21:04:24
664
原创 旋转数组解决方法
旋转数组主要思路:思路一:首先将数组全部反转,然后前半部分反转,后半部分反转例如:1234567 移动3次(这里注意一下可能移动10个,移动7次和原本的数组一样,所以 我们对位移求模,10%7==3)全部反转 7654321反转前3个 5674321反转后面部分 5671234class Solution { public void rotate(int[] nums, int k) { int len = nums.length; k =
2022-04-11 19:48:29
380
原创 买卖股票的最佳时机 II
买卖股票的最佳时机 II主要思路:求上升区间的高度差的累加和,对于每一个递增区间都算出来每两个之间的差值,然后累加起来解释一下为什么要划分为一个一个的递增区间:我们用1 3 2 10 和 1 3 3 10来对比我们发现在图一中,有明显下滑,我们如果要求最大的利润,是第一天买入,第二天卖出,第三天买入,第四天卖出,共计3-1 + 10-2 = 10,为什么不会考虑非要在一个递增区间的开始买入和最高卖出呢,为什么不可以在下一个递增区间卖出呢,我们由图一看到第三天的下滑,那么我们计算一个区间的从低到高
2022-04-10 15:20:22
394
原创 删除排序数组中的重复项
删除排序数组中的重复项主要思路是:我们将不重复的数据存储在数组的前面部分,实现过程是通过slow指针指向前面的不重复部分的最后一个,而fast指针是负责找到后面哪个元素还没有重复过:如果fast的和slow的元素相同,那么fast往后接着走,直到找到下一个不同的如果fast的和slow的元素不同,那么由于slow是最后一个不重复的元素,而要新加一个不重复的元素,slow先向后+1,然后再将fast的元素覆盖到slow所在位置,slow成了新的不重复部分的最后一个,直到fast走完整个数组clas
2022-04-10 14:27:37
220
原创 Pytorch环境搭建
Pytorch环境搭建这里写目录标题Pytorch环境搭建机器环境搭建步骤1.下载Anaconda32.下载Pytorch测试结果机器环境系统:win11显卡:NVIDIA GeForce RTX 3060 LaptopCUDA:11.4(显卡搭配)查看显卡型号:电脑管家,图吧,显卡管理器等查看附带CUDA:CMD中输入nvidia-smi搭建步骤1.下载Anaconda31.网址:https://www.anaconda.com/products/individual国内镜像:ht
2022-01-21 17:25:42
1236
原创 @vue/cli创建项目报错ERROR Failed to get response from /vue-cli-version-marker的解决方案
可以看到vue项目的配置中就是 yarn如果你使用的是npm,只需要改成 npm就可以
2021-01-24 17:40:08
877
原创 IPFS_basic_use
IPFS基本用法安装成功的前提下初始化ipfs init> initializing ipfs node at /Users/jbenet/.go-ipfs> generating 2048-bit RSA keypair...done> peer identity: Qmcpo2iLBikrdf1d6QU6vXuNb6P7hwrbNPW9kLAH8eG67z> to get started, enter:>> ipfs cat /ipfs/Qm
2020-12-31 02:28:47
247
原创 IPFS的PowerShell安装
IPFS的PowerShell安装第一步:cd ~\第二步:wget https://dist.ipfs.io/go-ipfs/v0.7.0/go-ipfs_v0.7.0_windows-amd64.zip -Outfile go-ipfs_v0.7.0.zip第三步:Expand-Archive -Path go-ipfs_v0.7.0.zip -DestinationPath ~\Apps\go-ipfs_v0.7.0第四步:cd ~\Apps\go-ipfs_v0.7.0\go-ipfs
2020-12-31 01:46:45
230
原创 Git官网章节2
git学习:git文件状态已跟踪(初始化仓库时,仓库中所有的文件都属于已跟踪和未修改状态)1.跟踪新文件git add newFile 状态转变为Changes to be commited:(说明跟踪文件之后的状态是放入了暂存区)2.当你修改了这个文件的时候(echo ‘myGit’>README)README文件刚才是 Changes to be commited 状态 ,现在转变为Changes not staged for commit:(说明跟踪的文件发生了变化,但是没有放到
2020-12-24 15:27:30
216
原创 原子性
我用#优快云#这个app发现了有技术含量的博客,小伙伴们求同去《什么是原子性,什么是原子性操作?》, 一起来围观吧 https://blog.youkuaiyun.com/Android_Mrchen/article/details/77866490
2020-11-27 11:50:53
149
原创 MapRecue控制台警告
WARNING: An illegal reflective access operation has occurredWARNING: Illegal reflective access by org.apache.hadoop.security.authentication.util.KerberosUtil (file:/D:/server/maven/repository/org/apache/hadoop/hadoop-auth/2.7.2/hadoop-auth-2.7.2.jar) to m
2020-10-14 15:36:22
366
原创 MapReduce没有打印相关信息
MapReduce没有打印相关信息控制台输出显示解决办法12控制台输出显示显示Log4信息不全解决办法1在Resource类别文件夹下面创建 log4j.properties 文件内容如下:log4j.rootLogger=INFO, stdoutlog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.a
2020-10-14 15:29:11
294
原创 Re-download dependencies and sync project
Re-download dependencies and sync project主要是下载时间过长的问题,所以导入在setting中直接导入包下载的地方:直接下载解压导入链接:https://pan.baidu.com/s/1R6_b4wircYORM5KiaNABrA提取码:4p2v
2020-09-17 20:31:05
509
原创 Vue项目&ECharts开源可视化库
Vue项目&ECharts开源可视化库安装导入使用使用细节图标参数(X坐标,标题,Y坐标,图示等等)官方API文档查询官方现有实例导入(推荐初学者ME)安装本开源库主要是用来进行图表的组件使用,可以减少自己编程的代码量,同时也提供了大量属性,供开发者灵活使用在Vue控制台输入npm install echarts --save导入在main.js中导入import echarts from “echarts”;Vue.prototype.$echarts = echarts;使用
2020-07-08 18:51:51
1835
原创 Vue父子组件通信
Vue父子组件通信子组件传值父组件:$emit父组件传值子组件:props子组件传值父组件:$emit原型:vm.$emit( eventName, […args] )参数:● {string} eventName● […args]触发当前实例上的事件。附加参数都会传给监听器回调。实例://子组件<template> <div> <p style="color: red;font-size: 30px;">下面这是一个子组件</p>
2020-07-03 22:31:04
1357
1
原创 Git基本使用
git使用配置创建仓库文件提交三部走克隆项目查看项目状态分支绑定远程库github配置安装在这里不进行描述 :git下载地址配置用户名称和邮箱:$ git config --global user.name “name”$ git config --global user.email 1xxxxxx4@qq.com(邮箱不限制,这里仅仅举例)查看配置:git config --list创建仓库创建仓库:git init FileName文件提交三部走1.跟踪文件:git add
2020-06-30 01:58:42
2079
原创 SpringMVC不同层的解释和联系
SpringMVC不同层的解释和联系定义entity层(model,pojo,bean)dao层(持久层/mapper层)service层(业务层)controller层(控制层)调用关系分层的作用定义entity层(model,pojo,bean)主要是实体类的定义,对应于数据库的属性值,方便后面该类型对象的创建dao层(持久层/mapper层)dao层是也就是数据访问对象(data access object),仅仅是一个拥有方法名的面向对象的数据库接口,这些方法一般是对于数据库的操作方法。具
2020-06-29 19:50:51
651
原创 四种权限修饰符(Java)
四种权限修饰符同一个类同一个包(不同类)不同包子类不同包非子类类型publicprotected(default)private同一个类YYYY同一个包(不同类)YYYN不同包子类YYNN不同包非子类YNNN这里的(default)是指什么都不写的情况,而不是关键字default !!!同一个类public class MyClass { public int a; protected int b;
2020-06-26 17:58:50
466
原创 关键字final的使用和理解(Java)
关键字final的使用和理解一.修饰类二.修饰方法三.修饰变量1.成员变量2.局部变量引用类型基本类型一.修饰类final用来修饰类的时候,这个类就不可以被继承,俗称“太监类”,什么意思呢?就是说这个类不能再有子类,但是对于他继承于父类是不会有影响的,他依然可以覆盖重写父类方法,类似于古代的太监虽然香火断了,但是父亲还是存在的。//我们姑且用Fu类-->Zi类-->Sun类public class Fu {}//final修饰Zi类,但是依然可以继承于Fu类public final
2020-06-25 18:57:53
865
原创 多态的转型(Java)
多态的转型(Java)向上转型向下转型向上转型多态中的向上转型也就是多态的定义Fu fu = new Zi();向上转型就是从子类向父类转换,有人可能会说,直接定义一个子类对象不是更直接吗?不错,但是如果你是要实例很多种类的对象的话,那么我们姑且来说100个,那么你在阅读过程中,父子类的关系就会淡化,而多态的意义在于能够根据不同的需求实例化不同的对象,更加直接的表示出来父子类的关系,这也是向上转型的意义,同时,向上转型是从小到大,没有限制条件的,这么来说,猫是一个动物,猫会爬,那么向上转型成动物,
2020-06-25 16:08:52
1120
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅