自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

A2105153335的博客

采购学算法java

  • 博客(121)
  • 收藏
  • 关注

原创 hot 100 234. 回文链表

首先可以想到回文判断得看开始的和最后的是否一样,我们想当然可以逆转链表,然后比较,但空间复杂度较高,而且有点问题反转把head也改了,过不去,有没有其他的办法呢,我们说是有的,只反转后半部分然后再比较。给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true;否则,返回 false。以个人刷题整理为目的,如若侵权,请联系删除~链表中节点数目在范围[1, 10^5] 内。⭐️⭐️⭐️⭐️(1~10星)

2026-04-15 15:58:45 51

原创 hot 100 199. 二叉树的右视图

就是输出二叉树每一行的最右边的数,既然是一层一层的我们首先能想到BFS,怎么做呢,bfs是一层一层遍历到一层最后一个节点把它加入不就行了吗,怎么判断是一层的最后一个呢:只要把一层的放到一个列表里然后最后一个拿出来就行了。给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。dfs也可以做,就看递归的深度,每次遇到新高度就加入一个,先递归右子树保证在右边。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️⭐️(1~10星)

2026-04-15 15:04:10 197

原创 hot 100 19. 删除链表的倒数第 N 个结点

两个指针相当于也是一个先走n+1步,然后两个一起走,第一个走到最后一个时第二个走到了倒数n+1个节点然后指向下一个的下一个就行了。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。采用灵神的思路,增加一个哨兵节点以防倒数第n个节点就是第一个节点。第二个走了l-n-1步倒着数就是倒数n+1.以个人刷题整理为目的,如若侵权,请联系删除~然后走到末尾需要走l-n-1步。⭐️⭐️⭐️⭐️(1~10星)链表中结点的数目为 sz。首先一个先走n+1步。

2026-04-11 13:22:28 183

原创 hot 100 73. 矩阵置零

不能使用额外空间只能在原数组上操作,我们可以把数组第一行第一列当作标记,看行列是否有0,遍历一遍标记。但第一行第一列怎么处理,可以先用boolen记录一下其他都修改完再处理,同时第一列是否有0用m[0][0]就能表示。给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0。请使用 原地 算法。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️⭐️(1~10星)

2026-04-11 13:02:17 83

原创 hot 100 230. 二叉搜索树中第 K 小的元素

给定一个二叉搜索树的根节点 root ,和一个整数 k ,请你设计一个算法查找其中第 k 小的元素(k 从 1 开始计数)。自己想出来了,没想到和灵神第一种思路一样,记录一下k值,到0就记录值最后返回就行了。中序遍历就是二叉搜索树的升序序列。以个人刷题整理为目的,如若侵权,请联系删除~树中的节点数为 n。

2026-04-07 21:32:12 56

原创 hot 100 206. 反转链表

翻转链表,两种方法吧,想想我们的数组反转reverse就行了,链表想要访问一个节点必须遍历所以首先我们应该能想到一个解法。遍历到最后一个节点让它作为头节点,头节点指向空,然后回到倒数第二个让它指向,过程如下。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。迭代法的话就弄一个空的p把节点遍历头插法放进去。以个人刷题整理为目的,如若侵权,请联系删除~链表中节点的数目范围是 [0, 5000]⭐️⭐️⭐️(1~10星)

2026-04-07 21:07:46 56

原创 460. LFU 缓存

用 minFreq 快速定位最小频次,用 LinkedHashSet 在同频次内实现LRU兜底,两者结合实现全程O(1)。关键在于维护一个 minFreq 变量,随时知道当前最小频次是多少,淘汰时直接定位,不用遍历。某个key频次+1,旧桶变空,且旧桶就是minFreq → minFreq++put新key时 → 新key频次必为1,所以 minFreq = 1。LFU的淘汰规则:访问次数最少的先淘汰,次数相同则淘汰最久没用的。如果每次淘汰都遍历所有key找最小频次,是O(n),太慢。

2026-04-06 16:28:49 467

原创 hot 100 146. LRU 缓存

void put(int key, int value) 如果关键字 key 已经存在,则变更其数据值 value;如果插入操作导致关键字数量超过 capacity ,则应该 逐出 最久未使用的关键字。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。最近最少使用,就是最近put/get的元素。再看超出容量没有,超出了移除最近最少使用的也就是第一个,然后放进去。然后 get时候没有就-1,有就make一下,获得值。⭐️⭐️⭐️⭐️⭐️(1~10星)

2026-04-05 14:53:25 247

原创 hot 100 56. 合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。按照区间左端点排序,然后比较在不在一个区间,在就合并,不在就加入。为何按照左端点,右端点也行不过到倒着遍历,主要是有个顺序可以合并。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️⭐️(1~10星)

2026-04-04 17:45:21 64

原创 hot 100 160. 相交链表

还可以双指针优化,两个一起往后走,相交部分长度是c,A的不相交是a,B的是b。给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果 listA 和 listB 有交点,intersectVal == listA[skipA] == listB[skipB]skipA - 在 listA 中(从头节点开始)跳到交叉节点的节点数。skipB - 在 listB 中(从头节点开始)跳到交叉节点的节点数。用HashSet存一下A的,遍历B包含就返回,没有就是null。

2026-04-04 15:16:06 369

原创 hot 100 46. 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列。你可以 按任意顺序 返回答案。全排列,c++函数一步搞定。可以进行回溯处理也差不多是递归的意思,去了之后要返回来之前状态。以个人刷题整理为目的,如若侵权,请联系删除~nums 中的所有整数 互不相同。⭐️⭐️⭐️(1~10星)

2026-03-19 00:14:57 41

原创 hot 100 200. 岛屿数量

利用递归的思想解决问题,要知道岛屿数量,我们遍历每一个节点从它出发左右上下走经过的就变为0,这样完了之后就是一个岛屿数量加1,以此类推。给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。grid[i][j] 的值为 ‘0’ 或 ‘1’以个人刷题整理为目的,如若侵权,请联系删除~此外,你可以假设该网格的四条边均被水包围。⭐️⭐️⭐️(1~10星)

2026-03-19 00:03:14 187

原创 hot 100 35. 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。nums 为 无重复元素 的 升序 排列数组。以个人刷题整理为目的,如若侵权,请联系删除~二分经典题目,注意边界范围处理就行。⭐️⭐️(1~10星)

2026-03-16 17:21:07 72 1

原创 hot 100 121. 买卖股票的最佳时机

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0。遍历一次如果价格小于a就更新a,否则就判断利润是否比b大,大也更新b。贪心算法,我们只要设定一个a就是买股票的钱,b为利润。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️(1~10星)

2026-03-16 16:23:14 195

原创 hot 100 300.最长递增子序列

就正常人思维想的话还是暴力从每一个数开始往后遍历看递增的序列长度,但是这样做肯定不对了,因为序列不是有序的,可能大的在前面,长度是和后面小的连起来才最大。所以又是要枚举所有情况从i位置开始和从后面每一位开始的递增长度,这样时间会超时,时间复杂度太大了。f[i]表示以i位置为结尾的最长递增子序列长度,那么面对前面小于的元素,就是从那个状态过来的所以是f[i]=max(f[i],f[j]);是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。⭐️⭐️⭐️⭐️(1~10星)

2026-03-15 16:26:21 69

原创 hot 100 1147.最长公共子序列

但我们可以用别的思想解决问题,子串每次到一个字母,前面的字母构成了另外一个字串,那么再加一个字母是不是就是从之前状态过来的,有没有什么关系,这就涉及到了动态规划,每一步都和之前状态有关系,得出这个关系我们就能解决了。如果不相等呢就不用加对不对,从哪里开始呢就是f[i-1][j],f[i][j-1]里面挑最大值了。是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。,返回这两个字符串的最长。

2026-03-15 15:38:50 332

原创 hot 100 53.最大子数组和

贪心的思想我感觉还是,更新sum也就是最大值了,只是为了取消负数的影响增加一个num变量。如果sum+i比i都小了那么从i开始呗说明前面加起来是个负数。给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️再加半颗(1~10星)子数组是数组中的一个连续部分。

2026-03-14 00:45:47 158

原创 hot 100 98. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。依旧老朋友递归遍历左右子树看是否符合二叉搜索树规则,如果节点的值比最大的还大或者比最小的还小肯定不行。节点的左子树只包含 严格小于 当前节点的数。节点的右子树只包含 严格大于 当前节点的数。以个人刷题整理为目的,如若侵权,请联系删除~所有左子树和右子树自身必须也是二叉搜索树。树中节点数目范围在[1, 10^4] 内。⭐️⭐️⭐️(1~10星)

2026-03-14 00:06:46 67 1

原创 hot 100 108. 将有序数组转换为二叉搜索树

给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。找到中间结点,从中间节点拆成左右2部分。每部分构建一颗树,将其赋值给中间节点左右节点。以个人刷题整理为目的,如若侵权,请联系删除~2、每一层做什么事情(只关心当前层!nums 按 严格递增 顺序排列。

2026-03-12 12:01:19 422

原创 hot 100 102. 二叉树的层序遍历

给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。以个人刷题整理为目的,如若侵权,请联系删除~树中节点数目在范围 [0, 2000] 内。

2026-03-12 11:09:24 50

原创 hot 100 543. 二叉树的直径

我们可以考虑这个直径的路径应该是只会拐弯一次的就最后一定可以找到一个子树把这条路径覆盖了,这个子树的节点node也是从左右两边子树过来的,所以不断递归左右两边得到结果。二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。这条路径可能经过也可能不经过根节点 root。怎么说呢,树是天然对称的,要找到题目中所说树的直径。给你一棵二叉树的根节点,返回该树的 直径。两节点之间路径的 长度 由它们之间边数表示。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️(1~10星)

2026-03-11 21:30:44 64

原创 国外的顶级免费学习网站

⭐️MIT OpenCourseWare (OCW): 麻省理工学院公开课程,涵盖几乎所有学科。⭐️edX: 由哈佛大学和麻省理工学院(MIT)联合创建,提供全球名校的免费公开课。⭐️Open Yale Courses: 耶鲁大学提供的免费开放课程,无需注册。⭐️Coursera: 合作涵盖全球100多所顶尖大学,部分课程可免费旁听。⭐️Stanford Online: 斯坦福大学的免费在线课程。

2026-03-11 21:04:03 669

原创 hot 100 101. 对称二叉树

要判断一棵二叉树是否对称,我们需要比较树的左右子树是否互为镜像。给你一个二叉树的根节点 root , 检查它是否轴对称。将一个节点的左子节点和另一个节点的右子节点入队。将一个节点的右子节点和另一个节点的左子节点入队。我们可以使用递归或迭代的方法来解决这个问题。每个树的右子树都与另一个树的左子树镜像对称。左子树的左孩子与右子树的右孩子比较。左子树的右孩子与右子树的左孩子比较。将根节点的左右子节点入队两次。⭐️⭐️⭐️(1~10星)两个根节点具有相同的值。每次取出两个节点比较。

2026-03-11 20:14:28 165

原创 hot 100 94. 二叉树的中序遍历

递归相信大家都会写,迭代我们使用栈来保存节点,一直到最左节点然后访问再到右边。给定一个二叉树的根节点 root ,返回 它的 中序 遍历。以个人刷题整理为目的,如若侵权,请联系删除~树中节点数目在范围 [0, 100] 内。⭐️⭐️(1~10星)

2026-03-10 15:14:43 60

原创 hot 100 226. 翻转二叉树

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。以个人刷题整理为目的,如若侵权,请联系删除~树中节点数目范围在 [0, 100] 内。递归,大问题分成子问题,交换左右子树。⭐️⭐️(1~10星)

2026-03-10 15:06:25 172

原创 hot 100 104. 二叉树的最大深度

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。树中节点的数量在 [0, 10^4] 区间内。给定一个二叉树 root ,返回其最大深度。以个人刷题整理为目的,如若侵权,请联系删除~dfs递归左右子树每次向下一次+1。⭐️⭐️⭐️(1~10星)

2026-03-08 16:33:44 172

原创 hot 100 118. 杨辉三角

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️(1~10星)

2026-03-08 16:21:07 34

原创 西北大学23机试题

(函数题)题目定义了一个结构体,里面有学生的姓名、学号、成绩等。主程序定义了结构体数组,存储了几个学生的信息。要求定义一个函数返回分数最高的学生的地址。(程序设计题)键入一个数字N和一个数字K,要求输出小于N的K个最大的质数的和,输出格式例如:2+3+5+7=17。(函数题)定义一个函数求两个字符串(用链表存储,且其他函数与主函数已经给出)的差集。(程序设计题)键入一个字符串,输出其最长回文子串的长度。如:输入abccd1221, 输出4。

2026-03-06 00:07:00 465

原创 西北大学24机试题

先求十进制数各个位数之和,再将其转换为二进制,同时计算二进制各位之和, 最后比较两个和是否相等。bfs学了数据结构应该都能看懂,就是学校机试给输入输出不知道怎么给还得建树不知道会不会这么麻烦。给定一个字符串和旋转位置 k(或右旋 k 位),利用反转法实现字符串旋转。有c++就挺简单的,其他语言还不太好写。

2026-03-06 00:02:29 892

原创 西北大学25机试题

【代码】2025西北大学机试题。

2026-03-02 20:24:12 609

原创 hot 100 5.最长回文子串

根据一个字母或数字往外扩展,直到不是回文串为止,奇偶长度的字符串有不同的处理结构但可以小技巧合二为一。也是一直扩展吧dp[i][j]代表是字符串从i到j是回文串,根据区间长度来定边界。各种边界条件都不能漏。给你一个字符串 s,找到 s 中最长的 回文 子串。以个人刷题整理为目的,如若侵权,请联系删除~⭐️⭐️⭐️再加半颗(1~10星)

2026-03-02 16:59:35 180

原创 hot 100 560.和为 K 的子数组

找到一个数组的所有子数组的和为k的数量,暴力肯定可以做到,如何优化,我们想到子数组的和可以用前缀和来表示,然后用哈希表存储和为n的子数组的数量,计算当前的前缀和 pre,检查 pre - k 是否存在于哈希表中。如果存在,说明存在若干子数组的和为 k,累加这些子数组的个数到 count,将当前前缀和 pre 存入哈希表,并增加其出现次数。最终 count 即为所有满足条件的子数组的个数。给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数。

2026-01-23 17:17:35 302

原创 hot 100 438. 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。每次进来字母++,如果区间长度等于p的长再判断含字母数量是否相等左窗口移动一位即可。计p的字母出现的个数,如果s长度小于p直接返回空数组,以个人刷题整理为目的,如若侵权,请联系删除~s 和 p 仅包含小写字母。

2026-01-06 20:42:01 307

原创 hot 100 3. 无重复字符的最长子串

要求不重复,很容易想到用set来存当前最长的子序列的字母,当不为第一个字母时,窗口向后移动一位,while统计从i开始的最长不重复序列长度,最后ans计算大小。给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。以个人刷题整理为目的,如若侵权,请联系删除~s 由英文字母、数字、符号和空格组成。

2026-01-06 20:20:43 206

原创 hot 100 42. 接雨水

可能是大家面对的第一道hard题,但在今天这个环境下也必须掌握了。解法也比较多,这里按官方解给出三种动规,单调栈,双指针。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。以个人刷题整理为目的,如若侵权,请联系删除~

2026-01-05 23:28:15 472

原创 hot 100 15. 三数之和

首先固定a的大小,然后双重循环找b+c=-a的数,其中要进行去重,所以我们先给数组排序,然后遍历a的值,判断first > 0 && nums[first] ==nums[first - 1],然后确定好c位置,遍历b的值其中也要和a一样判断second > first + 1 && nums[second] ==nums[second - 1],b+c之和小于-a就把c向前移动,bc相等跳过,等于目标值保存。= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。

2026-01-05 20:25:36 203

原创 hot 100 11. 盛最多水的容器

有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。我们left++和right–都是为了尝试取到更多的水,如果短的板不动的话,取到的水永远不会比上次多。木桶效应,最低的决定了你的上限,用两个值更新左边和右边的值,遍历找到最大容量.相当于从“最大宽”遍历到“最小宽”。然后我发现因为每次移动舍弃了小的,所以遍历时每次“宽”对应的“高”都是最大的!找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。所以双指针不断向中间移动,就遍历了所有最大的组合情况。

2025-12-31 13:46:45 422

原创 hot 100 283. 移动零

另一种思路也是i和j分别指向数组的相邻的值,然后看i位置是不是0,是的话就再看j是不是0,如果不是就交换,保证了除了0外元素相对位置不发生变化,是的话就j移动到下一个位置,如果i不是0的话就i++,j=i+1。就是把数组的所有0移动到数组最后的位置,但不能用多余空间,原地操作。所以我们用双指针的思想来操作,左指针指向的位置左边是非0数,右指针左边直到左指针都为0。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。以个人刷题整理为目的,如若侵权,请联系删除~

2025-12-31 13:26:22 336

原创 hot 100 128. 最长连续序列

找到数组中最长的连续序列长度,我们采用set的方法进行去重,然后检查数组每一个数的顺序前一个数是否在集合中,有就循环检查直到没有,更新最大长度即可。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。请你设计并实现时间复杂度为 O(n) 的算法解决此问题。以个人刷题整理为目的,如若侵权,请联系删除~

2025-12-30 23:32:48 248

原创 hot 100 49. 字母异位词分组

我们可以用hash存储它还是,字母异位词就是包含字母都相同的一组单词,他们的字母都一样,所以要找到一个统一的值作为key,每一个单词作为value,可以使用排序函数或者计数代码如下。字符串 “ate” ,“eat” 和 “tea” 是字母异位词,因为它们可以重新排列以形成彼此。🚗字母异位词:是通过重新排列不同单词或短语的字母而形成的单词或短语,并使用所有原字母一次。字符串 “nat” 和 “tan” 是字母异位词,因为它们可以重新排列以形成彼此。给你一个字符串数组,请你将 字母异位词 组合在一起。

2025-12-30 20:00:19 283

web基础课件.zip

web基础课件.zip

2023-12-29

个人的算法学习笔记第一个

中国剩余定理,适用于初学算法的同学们,后续也会继续更新其他的进行补充。

2023-07-26

空空如也

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

TA关注的人

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