
算法与数据结构
文章平均质量分 64
red润
全网red润 公众号 red润知识小爆炸
答疑QQ群811710917
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JavaScript 二维数组初始化:为什么 fill([]) 是个大坑?
JavaScript二维数组初始化的坑:避免fill([])的引用陷阱 当使用new Array(r).fill([])初始化二维数组时,所有子数组实际上指向同一个内存引用。修改任意子数组会导致所有元素同步变化,因为JavaScript数组是引用类型。正确做法是使用循环或Array.from/map方法独立创建每个子数组,确保引用独立。推荐写法:Array.from({length:r},()=>[])或new Array(r).fill().map(()=>[])。原始类型不受此影响,但引用类型需特别注意原创 2025-06-04 15:27:04 · 416 阅读 · 0 评论 -
奇怪?为什么 floor((n + t - 1) / t) 比 ceil(n / t) 更高效?(因为没有浮点转换带来的性能损耗)
整数运算(n + t - 1) // t比浮点运算ceil(n / t)更高效,因为它避免了浮点转换和运算的开销。其数学原理是通过添加偏移量t-1来模拟向上取整,确保整除时结果正确,非整除时自动进位。在支持整数除法的语言(如Python、C++)中推荐使用这种写法,性能更优;而在JS等强制浮点运算的语言中,Math.ceil可读性更好。特殊场景下,当除数为2的幂次时,还可使用位运算进一步优化。原创 2025-06-04 10:55:23 · 384 阅读 · 0 评论 -
计算中值时的安全性:mid = (left + right) / 2 与 mid = left + (right - left) / 2 的区别
然而,这种常见的计算方式可能会导致问题,特别是在处理大数字时。最近在使用二分算法的时候,发现取中间值有两种方案,并且两种方案带来的数据安全性是不同的,于是有了这篇博客。让我们深入了解这两种计算方式的区别及其背后的原因。两个变量相加,然后除以 2,得到它们的平均值,也就是中点。这意味着程序可能会计算出错误的中点值,从而影响后续的计算。这显然超出了最大整数值,导致溢出,最终的结果是不准确的。是最常见的写法,它在一些情况下可能会导致整数溢出。的结果可能会超出数据类型的范围,导致。的差值,再将其除以 2,并加上。原创 2025-01-23 09:06:14 · 439 阅读 · 0 评论