自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 收藏
  • 关注

原创 JUC 学习笔记

JUC 是 java.util.concurrent 工具包的简称,是一个处理线程的工具包。JUC 相关内容是 Java 学习和面试的重点,需要重点掌握

2023-06-02 14:30:29 1124

原创 【LaTeX 问题解决方案】I couldn‘t open file name `.aux‘

解决 vscode 的 latex 插件编译论文参考文献时报错的问题

2023-01-10 15:30:00 8279 2

原创 如何实现 Array, List 和 Set 的相互转换

BlueStragglers 共享技术成长的快乐文章目录1. Array 和 List 互转2. List 和 Set 互转3. Array 和 Set 互转1. Array 和 List 互转Array 转 List:如果用 Arrays.asList 方法,之后修改 Array,会直接改变 List。而且这种方法不能增删(没有 add remove 方法),只能查改(set get contains)。List 转 Array:如果用 List.toArray 方法,之后修改 List,不会改变

2021-09-16 20:44:07 607

原创 力扣刷题笔记——第797题. 所有可能的路径

第797题. 所有可能的路径参考题解:官方题解题目:标签:深度优先遍历。思路:这道题思路是很简单的。而且是有向无环图,都不用考虑环了。这种题是面试必须要会的。不过,这道题有一些 Java 语言的语法细节很有意思,如果不熟练可能会吃亏。首先,Deque 的使用。Deque 我个人认为是比 Queue 更好用的类型,就是双端队列,左右两侧都可以添加和删除,实现类有 ArrayDeque 和 LinkedList,方法是 offerFirst、pollFirst、offerLast、pol

2021-08-25 11:00:44 208

原创 力扣刷题笔记——第787题. K站中转内最便宜的航班

第787题. K站中转内最便宜的航班个人题解:动态规划求解问题题目:标签:动态规划。思路:这道题是一道典型的动态规划题。看到最便宜航班这类字样就应该判断动态规划,而不是图论类算法。判断这道题是动态规划而不是迪杰斯特拉算法,是一步关键思想。随后需要判断:dp数组是几维?外层是什么?内层是什么?外层根据分析,应该是中转次数。内层则是机场。随后判断dp内容。这里很简单应该都是 Integer.MAX_VALUE 作为基础值。最后一个难点是转移方程怎么写。经过思考后应该是:dp[i][

2021-08-24 09:42:39 326

原创 力扣刷题笔记——面试题 10.02 变位数组

个人题解:HashMap 求解问题题目:标签:考研编码。思路:这道题没什么难点。首先构建一个数组,将所有原数组的字符串按照字符进行排序,得到一个标准字符串列表。随后构建 HashMap,存储标准字符串和在结果数组中的位置。最后在结果数组中构建答案即可。题解:class Solution { public List<List<String>> groupAnagrams(String[] strs) { List<List&l

2021-07-18 12:57:56 119

原创 Linux Ubuntu 硬盘挂载方法

BlueStragglers 共享技术成长的快乐近期实验室购入了两块硬盘,委托我挂载到服务器上。在此整理一下挂载硬盘的过程。文章目录1. 查看新添加的盘符2. 硬盘分区(如果有分区需要)3. 格式化硬盘文件系统4. 挂载硬盘5. 开机自动挂载6. 取消挂载7. 查看挂载好的硬盘信息参考内容1. 查看新添加的盘符查看新添加的盘符,可以在 root 下使用 fdisk -l 命令。2. 硬盘分区(如果有分区需要)对于小于 2.2T 的硬盘,可以使用 MBR 主启动记录磁盘分区。对于更大的硬盘,

2021-07-10 10:16:00 1011 1

原创 力扣刷题笔记——第1418题. 点菜展示表

BlueStragglers 共享技术成长的快乐个人题解:题目挺简单,就是有点难题目:标签:又臭又长。思路:这道题考察的点还是蛮多的,最主要是考察了对语言的熟悉程度。最后写出的代码都是又臭又长的。不过也还挺优雅,挺有成就感。题解:class Solution { public List<List<String>> displayTable(List<List<String>> orders) { HashMa

2021-07-06 09:13:09 110

原创 一个有趣的 Git 练习网站

BlueStragglers 共享技术成长的快乐前一阵子整理一个 GitHub 项目,整得焦头烂额。一个项目我只上传了一部分文件上去,等到想要上传剩下的部分时,却告诉我无法完成提交。因为对 Git 的操作还不是特别熟练,所以我最后只能采用了一个笨方法:下载 GitHub Destop 拖拽式上传。为了以后不再出现这种尴尬的事情,我决定好好复习 Git 知识。于是,我就找到了这个有趣的 Git 练习网站:Learn Git Branching。Git For Branching 界面。还是非常

2021-06-25 16:39:51 2115 1

原创 力扣刷题笔记——第401题. 二进制手表

参考题解:官方题解题目:标签:意想不到。位运算。思路:这道题是一道简单题,只需要枚举就可以解决。然而,必须要知道这是一道枚举题。否则可能会想歪。枚举所有数字,用 bitCount 计算对应的比特数,保留符合要求的组合,并生成符合格式要求的题解。题解:class Solution { public List<String> readBinaryWatch(int turnedOn) { List<String> ans = new

2021-06-21 15:11:42 181

原创 每日一个 Java 知识点:如何区分 `>>` 和 `>>>` 运算符?

BlueStragglers 每日一个 Java 知识点集合>> 算数右移:舍弃最低位,最高位用符号填补。>>> 逻辑右移:舍弃最低位,最高位用 0 填补。在部分移除最低位 1 的运算中,不能用 >>,而应该用 >>>。否则会出现死循环。...

2021-06-16 10:50:16 470

原创 每日一个 Java 知识点:如何实现 Collections 的内部转换

BlueStragglers 每日一个 Java 知识点集合Collections 内部转换,可以直接用相应的 new 方法进行转换。如 setA 转换为 arrayListB,可以用下面的方法。List arrayListB = new ArrayList<>(setA);

2021-06-16 10:49:00 94

原创 每日一个 Java 知识点:如何获取 arrayA 的最大值和总和?

BlueStragglers 每日一个 Java 知识点集合可以利用 Java8 的新方法:Arrays.stream。获取最大值:max().getAsInt()。获取总和:sum()。max = Arrays.stream(arrayA).max().getAsInt();sum = Arrays.stream(arrayA).sum();

2021-06-16 10:47:49 204

原创 每日一个 Java 知识点:如何取整?

BlueStragglers 每日一个 Java 知识点集合可以利用 (int) 进行强制类型转换。Java 的强制类型转换就是舍去小数点后面的内容,也就是保留整数。也可以用 Math 对应函数。包括 Math.floor(), Math.ceil 和 Math.round()。 a = Math.floor(f) b = Math.ceil(f) c = Math.round(f)...

2021-06-16 10:46:21 132

原创 每日一个 Java 知识点:如何获取输入?

BlueStragglers 每日一个 Java 知识点集合这里的知识点包括:有三种方法:in/out 方法、替换系统流方法、Scanner 方法。in/out 方法:只能获取一个 char 类型的。System.out.print("Enter a Character");char charA = (char)System.in.read();替换系统流方法:需要 InputStreamReader 和 BufferedReader 配合使用。import java.i

2021-06-16 10:44:34 107

原创 每日一个 Java 知识点:如何初始化获取 hashMapA?

BlueStragglers 每日一个 Java 知识点集合可以通过 new HashMap<>() {{ put() }} ,实现 hashMapA 的初始化。Map<Character, Integer> hashMapA = new HashMap<>() {{ put('I', 1); put('V', 5); put('X', 10); put('L', 50); put('C'

2021-06-16 10:43:46 89

原创 每日一个 Java 知识点:如何对两个数 num1 和 num2 的每一位进行比较?

BlueStragglers 每日一个 Java 知识点集合可以首先异或操作,然后通过位移和与操作判断对应位是否相等。int res = 0, val = x ^ y;while (val != 0) { res += val & 1; val >>= 1;}return res;

2021-06-16 10:40:21 265

原创 每日一个 Java 知识点:如何将普通数组 arraysA 转换为包装类数组 arraysB?

BlueStragglers 每日一个 Java 知识点集合许多操作是只适用于包装类的,例如逆序排序,转换为集合类等等。因此,普通数组 arraysA 转换为包装类数组 arraysB 是十分重要的。可以用如下操作进行转换:int[] arraysA = new int[]{1, 2, 3};Integer[] arraysB = Arrays.stream(arraysA).boxed().toArray(Integer[]::new);...

2021-06-16 10:37:42 367

原创 力扣刷题笔记——第1744题. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?

BlueStragglers 共享技术成长的快乐个人题解:前缀和求解问题题目:标签:恶心。思路:这道题是考察前缀和。这个没什么难的。难点在于,如何通过所有样例!难点1:采用 long 保存元素,避免溢出问题!难点2:long fu = (long)(favoriteDay + 1) * dailyCap; 这里面如果不加一个强制转换,会导致结果溢出!原因是里面乘法元素全部都是 int 形的,直接乘会导致按照 int 形计算,最后返回一个 int 形给 long,不会报错,但结果不正确

2021-06-02 09:14:23 104

原创 力扣刷题笔记——第523题. 连续的子数组和

BlueStragglers 共享技术成长的快乐参考题解:官方题解题目:标签:意想不到。数学。恶心。思路:这道题其实是考验数学的。很多题都是这样,前缀和要和哈希表配合。以后看到前缀和,第一时间就要考虑到是不是和哈希表要配合。和哈希表配合,就要找到规律。这道题的规律就是,连续数组值要是 k 的倍数,那前后端的前缀和相对于 k 的余数就要相等。因此,只需要一遍扫描就可以,当扫描到后端的余数时,就要检查是否有前端的余数和它相等。如果相等,并且数组大小符合要求,就可以返回 true

2021-06-02 09:13:15 113

原创 力扣刷题笔记——第477题. 汉明距离总和

BlueStragglers 共享技术成长的快乐参考题解:官方题解题目:标签:位运算。意想不到。数学。思路:这道题和前面的一道题,汉明距离,是比较相关的。但是,那道题的方法如果直接拿过来用,会超时的。暴力法。但是需要使用 Integer.bitCount() 方法,才能暴力法,不然时间和空间都会超。数学方法:针对32位的 Int 的每一位统计 1 的个数。两两之间的不同位置之和为 c * (n - c),其中 c 是 1 的个数,n - c 是 0 的个数。题解:第一种

2021-05-28 14:47:15 116

原创 力扣刷题笔记——第461题. 汉明距离

BlueStragglers 共享技术成长的快乐参考题解:官方题解题目:标签:位运算。思路:这道题包括了位运算的典型内容。比较不同位置,首先要求异或,然后针对每一位,要用与运算,获取每一位是否为1。最后,通过位移运算移动数。题解:class Solution { public int hammingDistance(int x, int y) { int res = 0, val = x ^ y; while (val != 0) {

2021-05-28 12:33:32 120

原创 力扣刷题笔记——第664题. 奇怪的打印机

BlueStragglers 共享技术成长的快乐参考题解:官方题解题目:标签:动态规划。思路:可以转化为 i 到 j 之间的打印最少次数。初始条件:dp[i][i] = 1。转移条件:如果字符串在 i 的位置和 j 的位置一样,则可以考虑前一个点,也就是 dp[i][j] = dp[i][j - 1]。否则,考虑中间一个 k ,前半部分和后半部分求和,取最小值。为了确保动态规划计算顺序,需要左指针 i 从右往左,右指针 j 从左往右。当然右指针必须在左指针右边。

2021-05-24 21:07:51 196

原创 力扣刷题笔记——第897题. 递增顺序搜索树

参考题解:官方题解问题:思路:这道题就是中序遍历。这里感觉要注意几点,能更加专业:哨兵节点命名为 dummy,当前节点命名为 cur。前序遍历命名为 preorder,中序遍历命名为 inorder,后序遍历命名为 postorder。题解:class Solution { public TreeNode increasingBST(TreeNode root) { List<Integer> res = new ArrayList<Integer

2021-05-24 21:06:54 140

原创 力扣刷题笔记——第1011题. 在 D 天内送达包裹的能力

参考题解:官方题解问题:思路:这道题我一开始以为是动态规划,毕竟满足了最值问题和条件转移的思路。一看题解,看来道行还是不够,这是二分查找。这道题是一道带判断的二分查找。左边界是最大货物重量,右边界是总体重量。题解:class Solution { public int shipWithinDays(int[] weights, int D) { // 确定二分查找左右边界 int left = Arrays.stream(weights).max(

2021-05-20 14:40:54 238

原创 力扣刷题笔记——第633题. 平方数之和

BlueStragglers 分享技术成长的快乐参考题解:官方题解题目:思路:这道题其实蛮简单的,我用 TreeSet 配合 0 到 sqrt 扫描过了。但是答案提供了另一种思路:双指针。左指针为 0, 右指针为 sqrt(c),然后往中间找就行。题解:class Solution { public boolean judgeSquareSum(int c) { int left = 0; int right = (int) Math.sqrt(

2021-05-20 09:31:39 166

原创 力扣刷题笔记——第403题. 青蛙过河

BlueStragglers 分享技术成长的快乐参考题解:官方题解问题:标签:动态规划。思路:这是一道典型的动态规划题。用二维布尔数组存储状态。DP[0][0] 为初始状态为 true。状态转移 DP[I][K] = DP[J][K - 1] || DP[J][K] || DP[J][K + 1]。当两个石头间距大于 i 时没有答案。题解:class Solution { public boolean canCross(int[] stones) {

2021-05-20 09:28:01 112

原创 力扣刷题笔记——第137题. 只出现一次的数字2

参考题解:官方题解问题:标签:位运算。思路:对每一位都求和,然后 % 3。如果不为 0,结果就与它 |= 一下。难点1:sum += ((num >> i) & 1);难点2:if (sum % 3 == 1) {res |= (1 << i)};上面两个写的都非常漂亮巧妙。题解:class Solution {public: int singleNumber(vector<int>& nums) {

2021-05-20 09:21:45 76

原创 力扣刷题笔记——第554题. 砖墙

参考题解:官方题解问题:标签:哈希表。意想不到的方法。思路:这道题,我本以为是动态规划之类的,没想到是哈希表。由于穿过的砖块加上边缘的总和是定值,因此目标是让穿过的边缘最多,这样砖块就最少了。然后用哈希表进行统计即可。题解:class Solution { public int leastBricks(List<List<Integer>> wall) { Map<Integer, Integer> cnt = ne

2021-05-20 09:15:19 194

原创 力扣刷题笔记——第7题. 整数反转

参考题解:官方题解题目:标签:意想不到。思路:这道题难点在于,环境不允许存储超过32位的整数,包括符号位。其实符号位可以理解为一定会占用一位。最大数和最小数可以用 Integer.MAX_VALUE 和 Integer.MIN_VALUE。这样就清晰、简单了。题解:class Solution { public int reverse(int x) { int rev = 0; while (x != 0) { if

2021-05-20 09:12:46 192

原创 力扣刷题笔记——第1482题. 制作 m 束花所需的最少天数

参考题解:小明种花(推荐!清晰易懂又可爱的题解)题目:标签:二分查找。思路:这道题和前面介绍的 40 题,也就是 1011 题码头运货特别像。二分查找,边界是天数。然后根据 mid 指向的天数,找到符合要求又天数最少的答案。题解:class Solution { public int minDays(int[] bloomDay, int m, int k) { int n = bloomDay.length; if (m * k >

2021-05-20 09:11:02 192

原创 力扣刷题笔记——1310题. 子数组异或查询

个人题解:前缀和求异或题目:标签:位操作。思路:这道题难就难在,边界条件。一开始边界条件判断错,很有可能会慌乱。这在面试中也很容易造成问题。边界条件就是,需要在最前面添加一个0,来避免 left 为 0 的情况。右边界是闭的,所以右边界要 + 1。认清这一点就好办了。题解:class Solution { public int[] xorQueries(int[] arr, int[][] queries) { int length = arr.lengt

2021-05-20 09:09:56 93

原创 力扣刷题笔记——第12、13题. 罗马数字与整数的转换

参考题解:整数转罗马数字 官方题解。罗马数字转整数 官方题解。题目:标签:贪心法。思路:两道题都是贪心法,这是不容易想到的,需要背下来。第一道题从大到小构建数组即可。第二道题需要构建字典。都非常考验编程能力。题解:public class Solution { public String intToRoman(int num) { int[] nums = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9,

2021-05-20 09:09:15 107

原创 力扣刷题笔记——第692题. 前 K 个高频单词

参考题解:官方题解题目:标签:哈希表。排序。思路:这道题很考验编码能力。涉及到了:哈希表、排序改写。难点1:map.put(word, map.getOrDefault(word, 0) + 1);难点2:for (Map.Entry<String, Integer> entry : map.entrySet())难点3:Collections.sort(res, new Comparator<String>()) {@Override public int

2021-05-20 09:07:16 188

原创 力扣刷题笔记——第403题. 青蛙过河

第403题. 青蛙过河参考题解:官方题解问题:标签:动态规划思路:这是一道典型的动态规划题。用二维布尔数组存储状态。DP[0][0] 为初始状态为 true。状态转移 DP[I][K] = DP[J][K - 1] || DP[J][K] || DP[J][K + 1]。当两个石头间距大于 i 时没有答案。题解:class Solution { public boolean canCross(int[] stones) { int n = stones

2021-04-29 08:48:59 213

原创 力扣刷题笔记——第377题. 组合总和 4

参考题解:官方题解问题:思路:这道题一看就发现,和爬梯子是一样的。难点在于:爬梯子一般只有两个步伐,一次一层和一次两层,而这个有 nums 种步伐。其实办法就是:在内部加一个遍历,如果步伐比梯子数少,就加上那个减去那个步伐的 dp 的状态。这样其实就和爬梯子一样了。题解:class Solution { public int combinationSum4(int[] nums, int target) { int length = nums.length;

2021-04-24 09:44:49 210

原创 Hugging Face Transformers 错误解决方案

BlueStragglers 分享技术成长的快乐近期项目用到了 Transformers。然而,配置过程中发生了不少问题,好在通过查阅各种论坛(CSDN,Github Issues, Huggingface Discuss, StackOverflow …),最后都解决了。在这里将问题记录一下,方便后面大家配置。1. OSError: Unable to load weights from pytorch checkpoint file这个问题,是最最难解决的。我解决这个问题主要经过了三个过程:

2021-04-21 15:45:14 4114

原创 剑指 Offer 07. 重建二叉树

参考题解:二叉树的前序遍历 (分支思想)这道题的思路包括:根据前序遍历和中序遍历,可以很轻易看出,前序遍历可以获取根节点,然后将中序遍历划分为两个子区间,这是一个清晰的分治问题。但是,如何根据前序遍历数组,将两个遍历数组联系起来,这就需要通过 HashMap 存储每个前序遍历节点的位置。随后,建树函数需要存储前序遍历和中序遍历分别对应的数组中的起始和终止的位置。最后,分治时的子树的左右节点,对应的前序、中序遍历的起始、终止位置,这里需要记忆一下。可以分别记忆前序和中序的内容,因为都是两两对应的。

2021-04-12 20:38:13 56

原创 第 84 题. 柱状图中最大的矩形

参考题解:单调栈入门,使用单调栈快速寻找边界这道题可以分为两种思路:限定高度。限定宽度。其中,限定宽度的复杂度是 O(n^2),限定高度复杂度是 O(n),因此选择,固定每个柱的高度,向左右延伸,看看有没有比最大值还要大的矩形。单调栈是一种很适合这里的数据结构,如果新的元素比栈顶元素大,入栈。如果比栈顶元素小,就一个个弹出,直到栈没有元素或者新元素比栈顶元素大。元素出栈时,说明新元素是出栈元素向后找第一个比其小的元素。元素出栈后,说明新栈顶元素是出栈元素向前找第一个比其小的元素。代

2021-04-12 20:37:29 91

原创 剑指 Offer 40. 最小的 k 个数

参考题解:4种解法秒杀 TopK (快排、堆、二叉搜索树 BST、计数排序)这道题基于排序做十分简单。但是,由于只需要求最小的 k 个数,因此其实不用全部排序,只需要排序最小的 k 个即可。因此,考虑做法:1. 快速排序class Solution { public int[] getLeastNumbers(int[] arr, int k) { if (k == 0 || arr.length == 0) { return new int[0];

2021-04-12 20:36:33 100

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除