自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【递归】反转链表(easy)

题⽬链接:206. 反转链表。

2025-06-14 21:56:20 86

原创 【递归】合并两个有序链表(easy)

将两个升序链表合并为⼀个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。输⼊:l1 = [1,2,4], l2 = [1,3,4]输⼊:l1 = [], l2 = [0]两个链表的节点数⽬范围是 [0, 50]输⼊:l1 = [], l2 = []l1 和 l2 均按 ⾮递减顺序 排列。输出:[1,1,2,3,4,4]

2025-06-14 19:12:36 123

原创 【位运算】只出现一次的数字 III

解释一下最后一个循环的作用:因为已知sum的第k位为1,说明这两个数的第k位一个为0,一个为1,因此可以将nums中的元素分成两组,一组里边的元素的第k位都为0,另一组都为1,对每一组的元素分别求异或,因为其他的元素都有两个,异或的结果都为0,所以每一组的异或结果即为答案之一。我们可以使用位运算 x & -x 取出 x 的二进制表示中最低位那个 1,设其为第 l 位,那么 x1 和 x2 中的某一个数的二进制表示的第 l 位为 0,另一个数的二进制表示的第 l 位为 1。输入:nums = [-1,0]

2025-06-12 16:59:31 674

原创 【递归、搜索与回溯算法】概括

函数自己调用自己的情况c语言 + 数据结构(二叉树、快排、归并)学过。

2025-06-12 16:39:49 316

原创 【递归】汉诺塔 (easy)

在处理⼦问题的 ⼦问题b 时,我们应该将 A 柱中的最上⾯的盘⼦移动到 C 柱,然后再将 B 柱上的盘⼦移动到 C 柱。在处理总体问题的 ⼦问题b 时,A 柱中的最⼤盘⼦仍然是最上⾯的盘⼦,因此这种做法是通⽤的。这是我们需要⽤到 n = 2 时的策略,将 A 上⾯的两个盘⼦挪到 B 上,再将最⼤的盘⼦挪到 C 上,最后将 B 上的⼩盘⼦挪到 C 上就完成了所有步骤。因为 A 中最后处理的是最⼤的盘⼦,所以在移动过程中不存在⼤盘⼦在⼩盘⼦上⾯的情况。请编写程序,⽤栈将所有盘⼦从第⼀根柱⼦移到最后⼀根柱⼦。

2025-06-11 23:59:56 821

原创 【递归】汉诺塔 (easy)

在处理⼦问题的 ⼦问题b 时,我们应该将 A 柱中的最上⾯的盘⼦移动到 C 柱,然后再将 B 柱上的盘⼦移动到 C 柱。在处理总体问题的 ⼦问题b 时,A 柱中的最⼤盘⼦仍然是最上⾯的盘⼦,因此这种做法是通⽤的。这是我们需要⽤到 n = 2 时的策略,将 A 上⾯的两个盘⼦挪到 B 上,再将最⼤的盘⼦挪到 C 上,最后将 B 上的⼩盘⼦挪到 C 上就完成了所有步骤。因为 A 中最后处理的是最⼤的盘⼦,所以在移动过程中不存在⼤盘⼦在⼩盘⼦上⾯的情况。请编写程序,⽤栈将所有盘⼦从第⼀根柱⼦移到最后⼀根柱⼦。

2025-06-11 23:54:48 990

原创 【算法】位运算

191. 位1的个数给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。示例 1:输入:n = 11输出:3解释:输入的二进制串 1011 中,共有 3 个设置位。示例 2:输入:n = 128输出:1解释:输入的二进制串 10000000 中,共有 1 个设置位。示例 3:输入:n = 2147483645输出:30。

2025-06-10 19:16:19 1020

原创 【位运算】消失的两个数字(hard)

随后将 [1,n+2] 中满足 i & d!我们知道异或结果二进制表示为 1 代表了两缺失值该位置数值不同(一个该位置 0,另一个该位置为 1),我们可以根据异或和 t 中任意一位为 1 的位置来将两个缺失值划分到两组中。先将数组中的数和 [1, n + 2] 区间内的所有数「异或」在⼀起,问题就变成了:有两个数出现了「⼀次」,其余所有的数出现了「两次」。由于我们明确了是在 [1,n+2] 中缺失了两个数,我们可以先通过异或 [1,n+2] 以及所有的 nums[i] 来得到缺失两个数值异或和 t。

2025-06-10 18:22:29 400

原创 【位运算】只出现⼀次的数字 II(medium)

由于整个数组中,需要找的元素只出现了「⼀次」,其余的数都出现的「三次」,因此我们可以根据所有数的「某⼀个⽐特位」的总和 %3 的结果,快速定位到 ret 的「⼀个⽐特位上」的值是0 还是 1。给你⼀个整数数组 nums ,除某个元素仅出现 ⼀次 外,其余每个元素都恰出现 三次。对于哈希映射中的每个键值对,键表示一个元素,值表示其出现的次数。哈希映射中包含最多 ⌊n/3⌋+1 个元素,即需要的空间为 O(n)。输⼊:nums = [0,1,0,1,0,1,99]输⼊:nums = [2,2,3,2]

2025-06-09 16:56:03 305

原创 【Java SE】再谈String

在.Class文件被加载时,.Class文件中的常量池被加载到内存中称为运行时常量池,运行时常量池每个类都有一份。方式2,就是池化技术的一种示例,钱放在卡上,随用随取,效率非常高。常见的池化技术比如:数据库连接池、线程池等。在Java程序中,类似于:1,2,3,3.14,“hello"等字面类型的常量经常频繁使用,为。的方式,我们会在未来的学习中遇到各种"内存池”,“线程池”,“数据库连接池”2.家里有矿,一次性打一年的生活费放到银行卡中,自己随用随取,速度非常快。“池"是编程中的一种常见的,重要的。

2025-06-09 11:56:11 1895

原创 【位运算】两整数之和(medium)

于是,我们可以将整数 a 和 b 的和,拆分为 a 和 b 的无进位加法结果与进位结果的和。因为每一次拆分都可以让需要进位的最低位至少左移一位,又因为 a 和 b 可以取到负数,所以我们最多需要 log(max_int) 次拆分即可完成运算。给你两个整数 a 和 b ,不使⽤ 运算符 + 和 - ,计算并返回两整数之和。而所有需要进位的位为 a & b,进位后的进位结果为 (a & b) << 1。在不考虑进位的情况下,其无进位加法结果为 a⊕b。输⼊:a = 1, b = 2。空间复杂度:O(1)。

2025-06-06 10:22:17 313

原创 【位运算】丢失的数字(easy)

一个简单的做法是直接对 nums 进行排序,找到符合 nums[i] =i 的位置即是答案,如果不存在 nums[i]=i 的位置,则 n 为答案。解释:n = 1,因为有 1 个数字,所以所有的数字都在范围 [0,1] 内。给定⼀个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。解释:n = 3,因为有 3 个数字,所以所有的数字都在范围 [0,3] 内。解释:n = 2,因为有 2 个数字,所以所有的数字都在范围 [0,2] 内。

2025-06-04 23:51:14 848

原创 【位运算】判断字符是否唯⼀(easy)

利⽤「位图」的思想,每⼀个「⽐特位」代表⼀个「字符,⼀个 int 类型的变量的 32 位⾜够表⽰所有的⼩写字⺟。⽐特位⾥⾯如果是 0 ,表⽰这个字符没有出现过。⽐特位⾥⾯的值是 1 ,表⽰该字符出现过。实现⼀个算法,确定⼀个字符串 s 的所有字符是否全都不同。那么我们就可以⽤⼀个「整数」来充当「哈希表」。如果你不使⽤额外的数据结构,会很加分。输⼊: s = “leetcode”输⼊: s = “abc”s[i]仅包含⼩写字⺟。

2025-06-04 23:50:14 289

原创 【Java EE初阶】计算机是如何⼯作的

计算机是啥?一个计算机(电脑)分成几个部分??计算的需求在⼈类的历史中是⼴泛存在的,发展⼤体经历了从⼀般计算⼯具到机械计算机到⽬前的电⼦计算机的发展历程。⼈类对计算的需求,驱动我们不断的发明、改善计算机。⽬前这个时代是“电⼦计算机”的时代,发展的潮流是:更快速、更稳定、更微型。计算机的以后将如何发展,期待⼤家的努⼒。推荐书籍: 《计算机简史》Java发展史Java 在后面又抓住了两波机会.美好的时光,短暂的.新的挑战又会出现Java 看起来稳坐第一,实际上也面临很多挑战~2023

2025-06-02 23:12:25 2324

原创 【位运算】常见位运算总结

191. 位1的个数给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被称为汉明重量)。示例 1:输入:n = 11输出:3解释:输入的二进制串 1011 中,共有 3 个设置位。示例 2:输入:n = 128输出:1解释:输入的二进制串 10000000 中,共有 1 个设置位。示例 3:输入:n = 2147483645输出:30。

2025-05-30 22:59:51 1270

原创 【位运算】只出现一次的数字

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。如果不考虑时间复杂度和空间复杂度的限制,这道题有很多种解法,可能的解法有如下几种。上述三种解法都需要额外使用 O(n) 的空间,其中 n 是数组长度。时间复杂度:O(n),其中 n 是数组长度。只需要对数组遍历一次。除了某个元素只出现一次以外,其余每个元素均出现两次。输入:nums = [4,1,2,1,2]输入:nums = [2,2,1]输入:nums = [1]空间复杂度:O(1)。

2025-05-28 10:52:49 914

原创 【C++】小知识点

在C++中,#include 和 #include <bits/stdc++.h> 是用来引入不同的头文件,它们有着不同的特点和使用场景。

2025-05-27 23:48:02 221 1

原创 【位运算】 汉明距离

汉明距离广泛应用于多个领域。在编码理论中用于错误检测,在信息论中量化字符串之间的差异。两个整数之间的汉明距离是对应位置上数字不同的位数。根据以上定义,我们使用异或运算,记为 ⊕,当且仅当输入位不同时输出为 1。计算 x 和 y 之间的汉明距离,可以先计算 x⊕y,然后统计结果中等于 1 的位数。现在,原始问题转换为位计数问题。位计数有多种思路。

2025-05-27 13:51:17 888

原创 【算法】前缀和

想知道最⼤的「以 i 为结尾的和为 0 的⼦数组」,就要找到从左往右第⼀个 x1 使得 [x1, i]区间内的所有元素的和为 0。因此,我们仅需⽤⼀个哈希表,⼀边求当前位置的前缀和的余数,⼀边存下之前每⼀种前缀和的余数出现的次数。▪ 然后,我们可以⽤⼀个 for 循环枚举可能的中⼼下标,判断每⼀个位置的「前缀和」以及「后缀和」,如果⼆者相等,就返回当前下标。规定空的前缀的结束下标为 −1,由于空的前缀的元素和为 0,因此在遍历之前,首先在哈希表中存入键值对 (0,−1)。

2025-05-26 23:43:47 783

原创 【数据结构】Map和Set

【本节目标】

2025-05-26 12:38:11 2604 1

原创 【位运算】比特位计数

令 y=x & (x−1),则 y 为将 x 的最低设置位从 1 变成 0 之后的数,显然 0≤y<x,bits[x]=bits[y]+1。因此对任意正整数 x,都有 bits[x]=bits[x & (x−1)]+1。给你一个整数 n ,对于 0 <= i <= n 中的每个 i ,计算其二进制表示中 1 的个数 ,返回一个长度为 n + 1 的数组 ans 作为答案。对于给定的 n,计算从 0 到 n 的每个整数的「一比特数」的时间都不会超过 O(logn),因此总时间复杂度为 O(nlogn)。

2025-05-25 11:49:33 775

原创 【位运算】 位1的个数

时间复杂度 O(M) : n&(n−1) 操作仅有减法和与运算,占用 O(1);设 M 为二进制数字 n 中 1 的个数,则需循环 M 次(每轮消去一个1),占用 O(M)。(n−1) 作用: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1。n&(n−1) 作用: 二进制数字 n 最右边的 1 变成 0 ,其余不变。若 n&1=0 ,则 n 二进制 最右一位 为 0。若 n&1=1 ,则 n 二进制 最右一位 为 1。n 代表数字 n 最高位 1 的所在位数。

2025-05-24 00:50:26 872

原创 hashcode()方法 (必掌握)

hash是一个函数,该函数中的实现就是一种算法,就是通过一系列的算法来得到一个hash值。这个时候,我们就需要知道另一个东西,hash表,通过hash算法得到的hash值就在这张hash表中,也就是说,hash表就是所有的hash值组成的,有很多种hash函数,也就代表着有很多种算法得到hash值。

2025-05-23 12:28:26 627

原创 【MySQL】MySQL经典练习题(详解)

用户可以拥有多辆车,关系为1:m,题目已经说明违章信息包括用户和车辆,说明违章信息表中要记录用户和车辆,一个用户可以有多次违章记录,用户与违章记录关系为1:m,一辆车也可以有多次违章记录,车辆与违章记录关系也为1:m。在这个状况下,D也对。– 主要考虑学生与宿舍的关系:m:1,宿舍的查房记录是根据宿舍来查的,与宿舍有关系,一个宿舍可以多次查房,宿舍与查房记录是1:m的关系。说明:名字重复,说明同一个名字有多条数据,可以先按照名字分组,分组之后再过滤行数大于1的,就表示同一个名字至少有2条记录,重复了。

2025-05-22 23:34:29 1013

原创 【C语言】易错题 经典题型

出错原因:之前运行起来的可执行程序没有关闭 关闭即可输入3个整数,输出它们的平均值,保留3位小数。整数/整数=整数,浮点数/浮点数=浮点数A.‘\n’B.‘\060’C.‘\q’D.‘\b’答案解析:CA:‘\n’ 转义字符,代表换行B:‘\060’ 转义字符,060八进制数据,十进制为48,表示ASCII码为48的’0’C:‘\q’ 什么都不是D:‘\b’ 转义字符,表示退格。A.7B.8C.9D.10答案解析:A。

2025-05-19 21:25:59 849

原创 【数据结构】排序

快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序时间复杂度:O(N*logN)空间复杂度:O(logN)稳定性:不稳定归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。时间复杂度:O(N*logN)空间复杂度:O(N)稳定性:稳定。

2025-05-19 11:47:43 2691

原创 二叉树oj题

对两个二叉树同时进行深度优先搜索,只有当两个二叉树中的对应节点都不为空时才会访问到该节点,因此被访问到的节点数不会超过较小的二叉树的节点数。3. 如果两棵树都不为空,先检测两棵树的root是否相同,如果相同,再检测一个的left是否为另一个的right 并且一个的right是否为另一个的left。2. 求根的左右子树高度,然后做差检测其高度差的绝对值是否超过1 如果超过则不是。若省略:仅依赖高度差判断,会漏掉子树自身不平衡的情况,导致错误结果。1. 如果是空树,直接返回,注意:空树也是平衡二叉树。

2025-05-18 17:14:33 760

原创 【前缀和】矩阵区域和(medium)

因此修正后的坐标为: x1 = max(0, i - k), y1 = max(0, j - k);输⼊:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 1。输⼊:mat = [[1,2,3],[4,5,6],[7,8,9]], k = 2。输出:[[12,21,16],[27,45,33],[24,39,28]]输出:[[45,45,45],[45,45,45],[45,45,45]]• j - k <= c <= j + k 且。• (r, c) 在矩阵内。

2025-05-15 17:44:44 856

原创 【前缀和】连续数组(medium)

题目要求找到二进制数组中0和1数量相等的最长连续子数组的长度。通过将0记为-1,1记为1,问题转化为寻找和为0的最长子数组。使用前缀和与哈希表的方法,记录首次出现某个前缀和的位置,通过计算当前位置的前缀和与哈希表中记录的差值,找到符合条件的最大子数组长度。代码实现包括C++和Java版本,核心思路是通过遍历数组,计算前缀和并更新哈希表,最终返回最大子数组长度。

2025-05-14 23:29:02 323

原创 【前缀和】 K 整除的⼦数组(medium)

本题要求统计数组中元素之和可被整数 k 整除的连续子数组的数目。通过前缀和与哈希表的结合,可以高效解决该问题。核心思路是利用同余定理,即如果两个前缀和对 k 取模的结果相同,则它们之间的子数组和可被 k 整除。具体实现中,使用哈希表记录每种余数出现的次数,遍历数组时计算当前前缀和的余数,并在哈希表中查找相同余数的次数,累加到结果中。代码中还对负数取模进行了修正,确保余数为正。该算法的时间复杂度为 O(n),适用于大规模数据。

2025-05-14 23:25:47 654

原创 【前缀和】和为 K 的子数组(medium)

文章讨论了如何通过前缀和与哈希表的方法,高效地找到数组中所有和为 K 的连续子数组的个数。算法核心思想是利用前缀和数组,通过计算当前位置的前缀和,并在哈希表中查找是否存在等于 sum[i] - k 的前缀和,从而确定符合条件的子数组数量。文章提供了C++和Java的代码实现,并强调了在更新哈希表时,统计结果和更新哈希表的顺序不能颠倒,特别是在处理 k=0 的情况时。这种方法的时间复杂度为 O(n),适用于大规模数据处理。

2025-05-13 22:49:23 330

原创 【前缀和】除自身以外数组的乘积(medium)

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。ii. suf 表⽰: i 位置之后的所有元素,即 [i + 1, n - 1] 区间内所有元素的后缀乘积然后再处理最终结果。i. post 表⽰:i 位置之前的所有元素,即 [0, i - 1] 区间内所有元素的前缀乘积,输入: nums = [-1,1,0,-3,3]输入: nums = [1,2,3,4]输出: [0,0,9,0,0]

2025-05-13 10:52:46 379

原创 【前缀和】寻找数组的中⼼下标(easy)

寻找数组的中心下标问题要求找到一个下标,使得该下标左侧所有元素的和等于右侧所有元素的和。如果不存在这样的下标,则返回-1。算法通过预处理前缀和和后缀和数组来实现。首先,计算每个位置的前缀和和后缀和,然后遍历数组,找到第一个满足前缀和等于后缀和的下标。如果找到,则返回该下标;否则返回-1。代码实现中,C++和Java版本均采用了相同的思路,通过循环计算前缀和和后缀和,并在最后进行判断。需要注意的是,边界情况(如数组最左端或最右端)需要特殊处理,以避免越界错误。

2025-05-12 20:40:56 301

原创 【数据结构】java对象的比较

本节主要介绍了Java中对象的比较方式,特别是在集合框架中PriorityQueue的使用场景。首先,PriorityQueue要求插入的元素必须能够进行比较,而自定义类型对象默认无法直接比较,因此需要通过实现Comparable接口或使用Comparator比较器来实现对象的比较。文章详细讲解了如何通过覆写equals方法进行对象内容的比较,并介绍了Comparable和Comparator接口的使用方法。Comparable接口允许对象自身定义比较规则,而Comparator则提供了更灵活的外部比较方式

2025-05-12 16:02:09 2149

原创 【前缀和】【模板】⼆维前缀和(medium)

本文介绍了二维前缀和算法,用于高效计算矩阵中任意子矩阵的元素和。算法通过预处理生成前缀和矩阵,使得每次查询能在O(1)时间内完成。首先,在原矩阵上添加一行一列0,避免边界条件处理。然后,通过递推公式计算前缀和矩阵。查询时,利用前缀和矩阵快速计算子矩阵和。代码部分提供了C++和Java的实现,并提醒注意数据溢出和下标处理的关键细节。该算法适用于大规模矩阵和频繁查询的场景,显著提升了计算效率。

2025-05-11 16:37:50 644

原创 【前缀和】【模板】⼀维前缀和(easy)

本文介绍了一维前缀和的概念及其在解决区间和查询问题中的应用。前缀和是一种预处理技术,通过构建一个前缀和数组,可以快速计算任意区间的元素和。具体步骤包括:首先读取数组并构建前缀和数组,然后利用前缀和数组在O(1)时间内回答每个查询。文章还提供了C++和Java的代码实现,并强调了从1开始计数以避免边界问题的重要性。通过这种方法,可以高效处理大规模数据的区间和查询。

2025-05-11 15:15:35 327

原创 【算法】二分查找

二分查找是一种高效的搜索算法,适用于有序数组。其基本思想是通过不断将搜索区间一分为二,逐步缩小范围,直到找到目标值或确定其不存在。二分查找的时间复杂度为O(logN),远优于线性查找的O(N)。在实现时,需注意指针的移动和中间值的计算,避免死循环。对于查找目标值的第一个和最后一个位置的问题,可以通过两次二分查找分别确定左右边界。关键在于理解区间的划分和指针的更新规则,而非死记模板。通过分析题意,确定搜索区间,才能灵活应用二分查找解决实际问题。

2025-05-10 22:12:50 792

原创 【二分查找】0〜n-1 中缺失的数字(easy)

题目要求在长度为n-1的递增排序数组中找出缺失的唯一数字,该数字范围在0到n-1之间。通过观察可以发现,缺失数字左边的元素与下标相等,而右边的元素与下标不等。利用这一特性,可以使用二分查找算法高效地解决问题。C++和Java的代码实现均通过二分查找来确定缺失数字的位置,时间复杂度为O(log n)。具体实现中,通过比较中间元素与下标的关系,逐步缩小查找范围,最终确定缺失的数字。

2025-05-10 09:13:49 418

原创 【MySQL】Java的JDBC编程

Java的JDBC编程1. 数据库编程的必备条件2. Java的数据库编程:JDBC3. JDBC工作原理4. JDBC使用配置最基本的一个JDBC程序编写流程JDBC查询4.1 JDBC开发案例4.2 JDBC使用步骤总结5. JDBC常用接口和类5.1 JDBC API5.2 数据库连接Connection5.3 Statement对象5.4 ResultSet对象6. 应用案例7. 内容重点总结面试问答:8. 课后作业

2025-05-06 19:08:12 1848

原创 【二分查找】搜索旋转排序数组中的最⼩值(medium)

转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2]。▪ 当 mid 在 [C,D] 区间的时候,也就是 mid 位置的值严格⼩于等于 D 点的值,下次。通过图像我们可以发现, [A,B] 区间内的点都是严格⼤于 D 点的值的, C 点的值是严格⼩。输⼊: nums = [4,5,6,7,0,1,2], target = 0。

2025-05-01 14:04:52 402

空空如也

空空如也

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

TA关注的人

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