《剑指Offer》笔记&题解&思路&技巧&优化 Java版本——新版leetcode
《剑指Offer》笔记&题解&思路&技巧&优化_Part_1
- 😍😍😍 相知
- 🙌🙌🙌 相识
- 😢😢😢 开始刷题
- 1. LCR 120. 寻找文件副本——数组中重复元素
- 2. LCR 121. 寻找目标值 - 二维数组——二维数组中查找
- 3. LCR 122. 路径加密——替换空格
- 4. LCR 123. 图书整理 I——从尾到头打印链表
- 5. LCR 124. 推理二叉树——重建二叉树
- 6. LCR 125. 图书整理 II——用两个栈实现队列
- 7. LCR 126. 斐波那契数——斐波那契数列
- 8. LCR 127. 跳跃训练——青蛙跳台阶问题
- 9. LCR 128. 库管理 I——旋转数组的最小值
😍😍😍 相知
当你踏入计算机科学的大门,或许会感到一片新奇而陌生的领域,尤其是对于那些非科班出身的学子而言。作为一位非科班研二学生,我深知学习的道路可能会充满挑战,让我们愿意迎接这段充满可能性的旅程。
最近,我开始了学习《剑指Offer》和Java编程的探索之旅。这不仅是一次对计算机科学的深入了解,更是对自己学术生涯的一次扩展。或许,这一切刚刚开始,但我深信,通过努力与坚持,我能够逐渐驾驭这门技艺。
在这个博客中,我将深入剖析《剑指Offer》中的问题,并结合Java编程语言进行解析。
让我们一起踏上这段学习之旅,共同奋斗,共同成长。无论你是已经驾轻就熟的Java高手,还是像我一样初出茅庐的学子,我们都能在这里找到彼此的支持与激励。让我们携手前行,共同迎接知识的挑战,为自己的未来打下坚实的基石。
(得了!看吧!一起学习、一起努力!!!)
LeetCode估计版权原因,把剑指Offer系列题都下降了,估计大家根据题目是找不到了,但是LeetCode其实是换汤不换药,把剑指offer的题目和描述改了一下而已,其他的依然不变。按照我的标题继续冲!
🙌🙌🙌 相识
根据题型可将其分为这样几种类型:
- 结构概念类(数组,链表,栈,堆,队列,树)
- 搜索遍历类(深度优先搜索,广度优先搜索,二分遍历)
- 双指针定位类(快慢指针,指针碰撞,滑动窗口)
- 排序类(快速排序,归并排序)
- 数学推理类(动态规划,数学)
😢😢😢 开始刷题
1. LCR 120. 寻找文件副本——数组中重复元素
题目跳转:https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/description
- 这道题在原书上绝对不是简单级别啊!
- 它考察的是程序员的沟通能力,先问面试官要时间/空间需求!
-
只是时间优先就用哈希表 时间: O ( n ) O(n) O(n) 空间 O ( n ) O(n) O(n)
class Solution { public int findRepeatDocument(int[] documents) { // 定义数据结构 Map hashmap = new HashMap(); // 遍历 for(int temp :documents){ if(hashmap.containsKey(temp))return temp; else hashmap.put(temp,1); } return 0; } }
-
还有空间要求,就用指针+原地排序数组 时间: O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n)) 空间 O ( 1 ) O(1) O(1)
class Solution { public int findRepeatDocument(int[] documents) { Arrays.sort(documents); for(int i = 0;i if(documents[i]!=documents[i+1])continue; else return documents[i]; } return 0; } } public int findRepeatDocument(int[] documents) { for(int i = 0;i while(documents[i]!=i){ if(documents[i]==documents[documents[i]])return documents[i]; int k = documents[documents[i]]; documents[documents[i]] = documents[i]; documents[i] = k; } } return 0; } } public int firstMissingPositive(int[] nums) { for(int i = 0;i
-
相关阅读: