2025.10.17
哈希
补充知识: https://javaguidepro.com/blog/hash-table-java/
哈希表是根据key直接访问存储位置的暑假结构,key–>hash函数–>存储桶,每个存储桶可以存储一个或多个键值对。(哈希冲突即不同的键映射到同一个存储桶中)
1.Hashtable 是 Java 中最早提供的哈希表实现,它是线程安全的,不允许键或值为 null
2.HashMap 是 Java 中最常用的哈希表实现,它不是线程安全的,允许键和值为 null
3.LinkedHashMap 是 HashMap 的子类,它维护了一个双向链表,用于记录键值对的插入顺序或访问顺序
当需要查询一个元素是否出现过,或者一个元素是否在集合里—>哈希法。用空间换时间,可以用数组、set、map…做哈希法
两数之和 题解1. 双重循环 题解2. 哈希法 Map(key,value) (我想的一个是双重循环,一个是排序比较,但是注意审题,排序之后下标都变了肯定不对!) a + b = target, 当指针指到a时,可以去map中找b是否存在。key存放值,value存放下标
代码: class Solution { public int[] twoSum(int[] nums, int target) { // 创建一个返回数组 int[] res = new int[2]; // 当传入的数组为空 直接返回[ , ] //数组为null是空引用,并没有创建这个数组对象 数组长度为0是有这个数组对象但数组元素为空 if(nums == null || nums.length == 0){ return res; } Map<Integer,Integer> indexMap = new HashMap<>(); // 遍历到某个a元素的时候,去map中找是否有满足target - a = b的b元素 有则将两者下标返回 没有则加入map // nums[i]当作key, i当作value for(int i = 0; i < nums.length; i++){ if(indexMap.containsKey(target - nums[i])){ res[0] = i; res[1] = indexMap.get(target - nums[i]); return res; } indexMap.put(nums[i],i); // haspMap插入key-value键值对 } return res; } }
class Solution { public void moveZeroes(int[] nums) { int[] res = new int[]; if(nums == null || nums.length == 0){ return res; }
}
}
2025.10.22
普通数组:
1.我首先想的是双指针 但是最大子数组和不具备单调性,无法使用常规的“滑动窗口”技巧(即不能通过移动左右指针来收缩或扩展窗口以逼近答案)–方法选用不当 不知道什么算法应该解决什么问题 2.前缀和 用数组来保存前缀和 这里又有几个坑 比如不能让fix_num += num[i] 因为fix_num中的元素初始化都为0 这相当于 fix_num = num[i]。 求前缀和可以用sum+=num[i],然后让fix_num[i] = sum; 而且要注意,不能简单的用最大前缀和-最小前缀和,要满足这个最大前缀和在最小前缀和的右边 否则不能计算。
|
|
最大区间和 = fix[j] - fix[i-1],其中 i <= j 要使这个差值最大,就要让 fix[j] 尽可能大,fix[i-1] 尽可能小,且 i-1 < j.【为什么是减去fix[i-1]???】 3.动态规划DP
二分查找:

|
|
我的想法就是将二维矩阵变成一维数组 然后再使用二分查找 因为这个题目中的数组都是m行n列的。别人的题解说可以用两次二分查找,之后记得看看!
1.如何遍历二维数组并将其转换为一维数组?
|
|
|
|
寻找左边界(不含target)和右边界(不含target) 主要还是要考虑清楚返回值是什么 要考虑target 存在和不存在的情况????
我想的是让这个旋转后的数组变成一个有序数组 然后进行二分查找 找到target 即新建一个数组存放原始未旋转的数组 然后找到在这个数组中target的下标 再去求旋转后数组的下标 但是有个问题 找旋转点的过程需要遍历整个数组O(N)
为什么情况是这么多种???? 1.二分后,左边的数组是升序的(nums[0]<nums[mid]) 1.1 target>nums[mid]:应该往右边搜索 1.2 target<nums[mid]并且target<nums[0]:应该往右边搜索 1.3 target<nums[mid]并且target>=nums[0]:应该往左边搜索
2.二分后,左边的数组是存在翻转点的(nums[0]>nums[mid]) 2.1 target<nums[mid]并且target>=nums[0]:应该往左边搜索 2.2 target<nums[mid]并且target<nums[0]:应该往左边搜索 2.3 target>nums[mid]并且target<nums[0]:应该往右边搜索 2.4 target>nums[mid]并且target>=nums[0]:应该往左边搜索
完成情况:(左右边界那题也不熟悉)

2025.10.23
今天换了一种刷题的策略 不按照分类做了 直接按照题单顺序来做 我觉得简单题其实难度还好 中等难度的题我就A不出来了 主要还是在于我的数据结构基础掌握的不是很牢固 今天刷题的时候遇到的问题:
1.hashmap怎么初始化 hashmap的操作 hashMap怎么遍历 怎么获得key 怎么获得value
2.动态数组ArrayList怎么创建 ArrayList的常见操作
3.位运算 异或运算符^,异或运算的性质 –相同为0,不同为1 任意数与0异或,结果仍是它本身。与运算 &
4.数组内置排序:Arrays.sort( )
5.Java支持十进制数字直接进行逻辑运算(计算的时候是按照二进制进行计算的)

2025.10.25
今天把之前写过的简单题回顾了一下 其中还是有一些题A不出来的 而且有的时候想法太多 一道题目把好几道题解想混了 就越想越多 反而做不出来 而且这些题解的时间复杂度和空间复杂度还有优化的可能 未来需要学习别人高阶的题解,还有一个问题是我对Java中内置的函数了解的不多 导致重复造轮子 写起来就比较吃力。 如果让我回顾一下简单题的知识点的话,首先是数据结构的实现:链表的数据结构(单链表),树的数据结构(二叉树)。主要涉及到的知识点:数组,动态数组ArrayList,HashMap(如何遍历HashMap),链表,位运算(异或,按位与),双指针,递归,二分查找。总体来说今天的状态还是满意的 写了16道题 想不出来实现方法/报错的有四五道 还可以接受。
今天没做出来的题目:反转链表,买卖股票的时机,移动零,删除链表倒数第N个节点 具体的实现代码我放在GitHub上面了,hot100 简单题回顾
2025.10.28
昨天公司派活了 在公司摸索一天 所以昨天就写了两道算法题 今天在公司依然在摸索 今天也写了两道题 不知道这种刷题策略有没有效果哦? [hot100双指针](1parado_repo.github.io/leetcode1028.java at main · 1parado/1parado_repo.github.io) 今天写了移动零和盛水最多的边界 也就是快慢指针和首尾指针 三数之和那道题 大致意思看懂了 但是让我自己实现有一点麻烦 之后再复习。
2025.10.31
昨天和今天总共写了四道题 其中有一道最大子数组的问题不是太熟悉 其他的三道题 做的挺熟的 遇到原题肯定是会做的! 我天,这个博客是10.17开始写的 截止今天为止10.31 现在我总共刷了23道题 基本上是一天两道题的程度 其中还有些掌握的不是很熟练的 我觉得这刷题速度太慢了 而且还没看SQL的相关题 昨天和今天做的四道题,大部分关于前缀和
2025.11.01
今天可以哦 截止今天为止总共刷了30道题目了!!! 一天刷了七道题 其实还可以吧这个速度 有些题目并不是最优解 如果碰到要求时间复杂度和空间复杂度的话估计会寄 今天的心情不是很美丽,这里就不说什么事情了 我不知道顿感力是好还是坏 后天又要上班 不想去 公司的业务难道真的要在周末完成吗 我觉得我负责的接口写的什么都不是呢。 今天写的力扣题目

2025.11.12
至今为止已经刷到了49题了,马上一半了。主要是好多题目是看着别人的代码才敲出来的。之后还是要多在算法上面下功夫的,主要是没有一个安静的做题空间,但是客观事实也不是借口,力扣刷到了一半!,希望面试的时候遇到的题目都是我会的题目,而且我看评论区,有些大厂要求一道题目不止会一道解法,还是要勤能补拙吧。之后要多刷多记,至少对于hot100的题目要做到熟练吧,还得看看sql题,感觉找个好工作好难啊,需要学的东西太多了,需要付出的东西也太多了,而且还要面对生活中的其他事情。
2025.11.16
今天刷到了六十题 四天刷了十题实在算不上多,问题的关键在于,我刷的慢,而且大多数题目没有经过自己的思考和讲解,所以在自己的脑子里面留不下印象,希望多写几遍会有进步,学习是有一个加速度的,只要基础打好,后面学知识会越来越快的,这个理论我是很相信的。刷题终于来到了60题,但是我觉得这肯定还是远远不够的,之后如果想去团子的话,肯定还是要刷codetop里面的题,希望能有个好的结果吧!希望以后的工作不忙,让我有时间学习自己的东西,虽然这有点像天方夜谭。