![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 93
抽刀断水的农民工
编程废物
展开
-
2024年4月26日力扣每日一题(1146)
这道题在做的时候感觉很简单,题意很容易理解,但直接去做直接干爆内存,参考了一下灵神的代码,豁然开朗,觉得这道题很有意思,便想着写篇博客记录一下,自己在算法上的欠缺还很多,如有不足或错误之处还望见谅。原创 2024-04-27 16:15:13 · 648 阅读 · 2 评论 -
Java算法之哈希算法
int hash;//哈希码Object key;//键//值Entry next;类定义这里定义了一个静态内部类Entry。静态内部类意味着这个类不需要外部类的实例就可以被实例化。在HashMap的实现中,这样的设计有助于减少内存占用,因为每个Entry对象不需要持有对外部HashMap对象的引用。成员变量int hash;//存储键的哈希码。当向哈希表中插入一个键值对时,会先计算键的哈希码,然后根据这个哈希码确定键应该放在哈希表的哪个位置。Object key;// 存储键。原创 2024-03-31 09:24:02 · 662 阅读 · 0 评论 -
Java算法之数论基础
更相减损法是中国古代数学家刘徽提出的求解最大公约数的方法,其原理是连续用较大数减去较小数,直至两数相等,此时的数即为两数的最大公约数。这个算法的关键在于通过不断替换较大的数为较小数和余数,使得每次迭代中,两个数的差值逐渐缩小,并最终找到它们的最大公约数。这里的绝对值符号仅是为了确保在 (a) 或 (b) 中有负数时仍能得出正确的结果,但由于最小公倍数定义应用于正整数,所以一般情况下 (a) 和 (b) 都是正数,因此实际上不需要取绝对值。的次方,即计算 (a^n) 的值。重复上述过程,直到a=b为止。原创 2024-03-15 16:01:34 · 849 阅读 · 0 评论 -
Java算法之动态规划
动态规划通常用于求解具有最优子结构特性的问题,即问题的最优解可以由其子问题的最优解有效地构造出来。此外,动态规划还要求子问题空间必须足够小,即子问题的数量随着问题规模的增加不会增长得太快,以便能够用有限的内存和时间来解决。原创 2024-03-07 22:09:23 · 1271 阅读 · 0 评论 -
力扣初级算法练习
在刚看到这个题时,感觉就是找到两个数,一个最大一个最小,而且最小值要在最大值的左边,但是看了示例后发现不是我所想的那样,比我想象的要复杂一些,因为每天都能对股票进行买卖,看了一会感觉没有头绪,无从下手,看了一下解析,理解了一些,把每天的股票状态分成两种,一种是有股票,一种是没有股票,因为题上说了只能持有一个股票,那就只有这两种状态,然后分别·计算两种状态的最大利润。 整体反转的方法,这个方法的思想就是先把全部的数组反转一下,然后反转前半部分,最后反转后半部分,就能得到最后结果。原创 2024-03-04 09:58:34 · 818 阅读 · 0 评论 -
动态数组(集合的底层实现)
在Java中,数组是一种用于存储固定大小的相同类型元素的数据结构。数组是一种引用类型,它存储了元素的引用,而不是元素本身(对于对象类型)或直接存储值(对于基本类型)。 首先思考动态数组需要满足什么,需要哪些参数,除了基本的索引,似乎还需要一个代表数组长度的capacity,对于这个capacity,我们先给定它一个初始值,当存储空间不够时,自动扩容。 对于数组的空间占用,有以下特点8 字节 markword4字节 class 指针(压缩 class 指针的情况)原创 2024-02-07 23:40:05 · 1135 阅读 · 0 评论 -
二分查找详尽学习
那么插入点是什么意思呢,举个例子,有一个数组a={2,5,8},我此时想要查找4这个数字,那么我调用这个方法之后,所得的结果是-2,为什么是-2呢,根据帮助文档可知,查找失败后,结果为-2=-(插入点) - 1,可以得到插入点为1,也就是如果把查找元素插入到这个数组里,那么插入的数组下标为1. 对于基础版的二分查找,谁可以代表插入点呢,经过分析可知,在基础班的二分查找中,i可以代表插入点。因此,在Java底层代码中,low就代表了插入点。原创 2024-02-05 23:05:18 · 1009 阅读 · 0 评论