随笔分类 -  算法

摘要:前言 由于我在学习二分查找的过程中处于会了忘,忘了复习的状态,因此总结一套适合自己记忆的模板。建议先看参考资料[1,2,3],理解二分查找各种细节的由来。 二分查找又死循环了?【基础算法精讲 04】 手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 阅读全文
posted @ 2023-01-17 13:46 dotJunz 阅读(284) 评论(0) 推荐(1) 编辑
摘要:前言 我感觉这题比较有代表性,所以记录一下,这题是加权有向图中求最短路径的问题。 题目 787. K 站中转内最便宜的航班 动态规划 假设有一条路径是[src, i, ..., j, dst],解法一子问题的定义是[src, i, ..., j],解法二子问题的定义是[i, ..., j, dst] 阅读全文
posted @ 2022-11-24 14:30 dotJunz 阅读(258) 评论(0) 推荐(0) 编辑
摘要:文章目录 前言题目解题思路遇到的坑:ArrayList和LinkedList未通过代码通过代码小结 ArrayList和LinkedList的区别在刷题的时候应该如何选择排序效率测试代码测试结果 遍历效率测试代码测试结果 结论 前言 记录java刷题的一个大坑,ArrayList和LinkedLis 阅读全文
posted @ 2022-11-13 16:47 dotJunz 阅读(274) 评论(0) 推荐(0) 编辑
摘要:题目 解题思路 一个很暴力的想法,在满足单调递增的前提下,使每一位分别取 1 或 0,去看看哪个结果小。 递归函数定义int dp(StringBuilder sb, int ind, int pre) sb是字符串,ind 是字符串当前位,pre 是字符串前一位(0或1) dp函数表示:从字符串当 阅读全文
posted @ 2022-10-31 11:15 dotJunz 阅读(216) 评论(0) 推荐(0) 编辑
摘要:前言 之前在力扣刷二叉树类型的题目时,经常会遇到bug,代码的结果和自己的预期不符,此时想到本地调试,却要先构造一个二叉树作为输入。之前一直用的笨方法,就是一个个new节点,然后把指针连起来。如果运气不好,这棵树运行成功了,又卡在另一棵树上,又要重新构造一棵树,很麻烦,导致我想放弃调试了。在网上也没 阅读全文
posted @ 2022-09-18 10:55 dotJunz 阅读(145) 评论(0) 推荐(0) 编辑
摘要:题目 2400. 恰好移动 k 步到达某一位置的方法数目 解题思路 观察上面示例,容易画出下面的递归树,因此可以考虑DFS。 DFS 很容易写出DFS的代码 class Solution { int res = 0; //记录可行路径数 public int numberOfWays(int sta 阅读全文
posted @ 2022-09-16 09:40 dotJunz 阅读(283) 评论(0) 推荐(0) 编辑
摘要:题目 2401. 最长优雅子数组 解题思路 滑动窗口思想 扩大窗口:当新来的数与窗口内的数按位与运算都为0,则加入,扩大窗口,更新答案。缩小窗口:如果新来的数与窗口内某个元素按位与运算不为0,则缩小窗口,直到新来的数与窗口内的数按位与运算都为0,再加入该数。 位运算 如何判断新来的数与窗口内的数按位 阅读全文
posted @ 2022-09-16 09:12 dotJunz 阅读(211) 评论(0) 推荐(0) 编辑
摘要:前言 二叉树的序列化是指将二叉树转化成一个字符串,便于存储或者通过网络传输。反序列化就是将字符串通过相同的规则转化成二叉树。 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据。 阅读全文
posted @ 2022-09-15 11:18 dotJunz 阅读(64) 评论(0) 推荐(0) 编辑
摘要:前言 有句话叫做:如果面试官跟你看顺眼的话,就给你出一道反转链表,否则就出一道 hard。 所以反转链表不能不会吧,要不面试官想要你都没有机会了。 206. 反转链表 class Solution { public ListNode reverseList(ListNode head) { } } 阅读全文
posted @ 2022-08-30 11:48 dotJunz 阅读(92) 评论(0) 推荐(0) 编辑
摘要:可以读通讯稿的组数 这题一开始暴力来做,也就是二重循环,就超时了。 通过观察公式发现 镜像号码 A + 原号码 B = 镜像号码 B + 原号码 A 等价于 镜像号码 A - 原号码 A= 镜像号码 B - 原号码 B 这样只需要O(n)复杂度,结合哈希表就可以做出来了。 具体做法:计算每个数和它反 阅读全文
posted @ 2022-08-22 15:26 dotJunz 阅读(21) 评论(0) 推荐(0) 编辑
摘要:记一个刷题过程中遇到的溢出问题。 在做这道题的时候遇到一个与 long 类型有关的溢出错误。 原始代码如下 class Solution { public int numberOfPairs(int[] nums) { long res = 0; int mod = (int)Math.pow(10 阅读全文
posted @ 2022-08-22 15:11 dotJunz 阅读(310) 评论(0) 推荐(0) 编辑
摘要:力扣题目 146. LRU 缓存 实现 LRU 缓存需要用到哈希链表 LinkedHashMap。 LinkedHashMap 是由哈希表和双链表结合而成的,它的结构如下所示。 用自带的 LinkedHashMap 实现 利用 Java 语言自带的 LinkedHashMap 很容易实现 LRU 缓 阅读全文
posted @ 2022-08-22 10:00 dotJunz 阅读(38) 评论(0) 推荐(0) 编辑
摘要:nSum问题模板 两数之和、三数之和、四数之和。 private List<List<Integer>> nSum(int[] nums, long target, int start, int n) { int len = nums.length; List<List<Integer>> res 阅读全文
posted @ 2022-08-19 11:19 dotJunz 阅读(264) 评论(0) 推荐(0) 编辑
摘要:股票问题通用模板 考虑交易次数、冷冻期和手续费。 // 股票问题通用模板 private int maxProfit_all_in_one(int[] prices, int max_k, int cooldown, int fee) { int n = prices.length; if(n <= 阅读全文
posted @ 2022-08-18 10:08 dotJunz 阅读(215) 评论(0) 推荐(0) 编辑
摘要:迪杰斯特拉算法用来解决加权有向图的最小路径问题,要求题目是无负权重边。它的算法主体和BFS相似。 算法签名如下: int[] Dijkstra(int start, List<int[]>[] graph); 输入是起点和图的邻接表,这里邻接表包含了权重信息。输出是起点到其他点的距离,是一个数组。 阅读全文
posted @ 2022-06-24 10:29 dotJunz 阅读(35) 评论(0) 推荐(0) 编辑
摘要:力扣 剑指 Offer 12. 矩阵中的路径 超时代码 dfs返回值是void,用类内的全局变量flag表示找到或没找到。 class Solution { public: bool flag; int vis[210][210]; int dir[4][2] = { {1,0},{0,1},{-1 阅读全文
posted @ 2021-12-16 21:10 dotJunz 阅读(28) 评论(0) 推荐(0) 编辑
摘要:迭代版本 int gcd(int a, int b) { while (b != 0) { int r = a % b; a = b; b = r; } return a; } int lcm(int a, int b) { return a / gcd(a, b) * b; } 递归版本 int 阅读全文
posted @ 2021-04-17 22:18 dotJunz 阅读(217) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示