自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(168)
  • 问答 (1)
  • 收藏
  • 关注

原创 LeetCode:100.寻找重复数

【代码】LeetCode:100.寻找重复数。

2025-10-06 17:12:11 239

原创 LeetCode:99.下一个排列

【代码】LeetCode:99.下一个排列。

2025-10-06 17:07:42 210

原创 LeetCode:98.颜色分类

【代码】LeetCode:98.颜色分类。

2025-10-06 16:27:27 232

原创 LeetCode:97.多数元素

这道题可以想象为一个抢占领地的游戏,我们将第一个数设置为胜利者,他首先抢占领地,将个数设置为1,如果下一个来的和他是同一个数字的话,count++,如果不同的话,count--,当count减为0的时候,说明他失败了,将下一个数设置为新的胜利者。

2025-10-06 15:44:02 413

原创 LeetCode:96.只出现一次的数字

这道题可以通过位运算来解决,我们知道相同的数异或结果会为0,所以我们只需要遍历数组进行异或运算,剩余的就是只出现一次的数字。

2025-10-06 15:38:00 182

原创 LeetCode:95.编辑距离

对于插入来说相当于在i+1位置插入一个字符,使i+1的字符等于j的字符,所以只需要让前i个字符转化为前j-1个字符的操作数加1即可,dp[i][j] = dp[i][j - 1] + 1。对于删除来说,相当于删除第i个字符,使前i-1个字符变为前j个字符,dp[i][j] = dp[i - 1][j] + 1。对于替换来说,将第i个字符替换使其与第j个字符相等,dp[i][j] = dp[i - 1][j - 1] + 1。

2025-10-06 15:32:49 762

原创 LeetCode:94.最长公共子序列

设dp[i][j]表示text1中前i个字符和text2中前j个字符最长公共子序列的长度,如果text1[i] == text2[j]的话,就去i - 1和j- 1的最长公共子序列长度加1,否则就看i - 1和j或者i和j - 1。

2025-10-06 11:46:26 336

原创 LeetCode:93.最长回文子串

【代码】LeetCode:93.最长回文子串。

2025-10-06 11:28:25 244

原创 LeetCode:92.最小路径和

这道题与不同路径基本相同,只不过dp[i][j]取得是dp[i - 1][j]和dp[i][j - 1]中小的那一个值,再加上当前值。

2025-10-05 11:39:36 258

原创 LeetCode:91.不同路径

设dp[i][j]表示到达i,j位置的不同路径个数,到达i,j有两种方法,一种是从i - 1, j位置向下走一步,一种是从i,j - 1位置向右走一步,所以dp[i][j] = dp[i - 1][j] + dp[i][j - 1],同时我们需要注意初始化问题,可以多开一行和一列,将[0][1]或[1][0]初始化为1。

2025-10-05 11:00:07 296

原创 LeetCode:90.最长有效括号

【代码】LeetCode:90.最长有效括号。

2025-10-04 19:28:10 892

原创 LeetCode:89.分割等和子集

和sum为偶数后,我们可以将其看作一个背包问题,我们需要从数组中找到和为sum/2的数组,所以我们就将其转化为背包问题。对于这道题,我们可以先计算数组的总和,如果总和为奇数的话,就不需要后面的判断了,奇数和肯定无法分割等和子集。我们取这两种结果的或运算,只要满足一种即可。

2025-10-03 23:05:18 249

原创 LeetCode:88.乘积最大子数组

对于这道题,我们只通过一个状态转移方程是解决不了的,因为前面的乘积中可能会存在负数这种情况,我们应当用两个来解决。设f[i]表示以i位置结尾的子数组的最大乘积,g[i]表示以i位置结尾的子数组的最小乘积。g[i]的情况与f[i]一样。

2025-10-03 22:45:30 365

原创 LeetCode:87.最长递增子序列

【代码】LeetCode:87.最长递增子序列。

2025-10-03 11:03:02 164

原创 LeetCode:86.单词拆分

设置dp[i]表示从[0,i]这个区间是否能在字典中找到,将[0,i]这个区间分为两个部分[0, j - 1]和[j, i],用一个哈希表来存储字典中的字符串,如果[0, j - 1]能够找到并且在哈希表中存在[j, i]的字符,那么表示可以拼接而成。

2025-10-03 10:03:17 239

原创 LeetCode:85.零钱兑换

对于这道题,遇上一道题的解法基本一致。

2025-10-03 09:53:45 287

原创 LeetCode:84.完全平方数

初始化的问题,我们需要用到上一个位置和左边的位置,所以需要从上到下,从左到右的初始化,同时注意边界问题,第0行第j列(1 <= j <= n)应当初始化为一个很大的值,表示不可能被选择,因为不会有从0个完全平方数中凑成j的情况。首先我们设dp[i][j]表示从前i个完全平方数中凑成j所需的最少数量,设置m为sqrt(n),因为对于一个n来说,所需要的完全平方数大小不会超过sqrt(n),比如16,开完为4,最多需要的完全平方数就到4,不可能到5。这道题通过动态规划来解决。

2025-10-02 17:51:32 862

原创 LeetCode:83.打家劫舍

我们要注意初始值,dp[0]没有房子偷,所以dp[0] = 0, dp[1] 只能偷第一间,dp[1] = nums[0]综上所述:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1])

2025-09-29 00:18:50 416

原创 LeetCode:82.杨辉三角

状态转移方程为:dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j],其中 dp[i - 1][j - 1] 和 dp[i - 1][j] 是当前元素左上方和上方的元素值,例如 4=1+3, 6=3+3。dp:定义状态 dpi][j] 为杨辉三角中第 i 行第 j 列(行列索引从 0 开始)的元素值。

2025-09-28 23:21:49 262

原创 LeetCode:81.爬楼梯

对于这道题,我们发现到达楼顶可以分为两部分,在楼顶的前一个位置跳一步到达,在楼顶的前两个位置跳两步到达,所以我们可以设一个方程来表示。dp[n]表示到达第n阶楼梯的方法数量,通过上面可以得出dp[n] = dp[n - 1] + dp[n - 2]这样的通式。开这个dp数组的时候可以开n的大小,也可以开n + 1,在这里选择n + 1的大小,这样从dp[1]到dp[n]刚好对应。在dp中,我们需要初始化dp[1]和dp[2],因为dp需要用到前两个位置,遍历的时候从3开始。

2025-09-28 09:40:01 207

原创 LeetCode:80.划分字母区间

由于同一个字母只能出现在同一个片段,显然同一个字母的第一次出现的下标位置和最后一次出现的下标位置必须出现在同一个片段。因此需要遍历字符串,得到每个字母最后一次出现的下标位置。在得到每个字母最后一次出现的下标位置之后,可以使用贪心的方法将字符串划分为尽可能多的片段,具体做法如下。

2025-09-28 08:54:37 350

原创 LeetCode:79.跳跃游戏Ⅱ

这道题与上一道不同在于肯定可以跳跃过去,计算步数,我们用一个end来保存边界,如果说已经走到了end的话,想要再向前走就必须要再跳一次。每次在上次能跳到的范围(end)内选择一个能跳的最远的位置(也就是能跳到maxpos位置的点)作为下次的起跳点。

2025-09-28 08:54:15 373

原创 LeetCode:78.跳跃游戏

我们通过贪心算法来解决,用一个变量来保存能够跳到的最远位置,如果跳到的位置>=最后一个位置了,就可以成功,同时,在能够跳到的最远位置中不断更新从这里面的位置起跳可以跳跃到的最远位置。

2025-09-28 08:53:42 195

原创 LeetCode:77.买卖股票的最佳时机

这道题通过贪心算法解决,我们通过保存最低的买入价格来计算利润。

2025-09-27 19:35:50 253

原创 LeetCode:76.数据流的中位数

由于满足以上条件,所以如果两个堆的数据个数相同返回他们的堆顶元素之和/2,不相同返回小根堆堆顶元素。那么插入的时候如何插入?

2025-09-27 19:27:22 295

原创 LeetCode:75.前K个高频元素

【代码】LeetCode:75.前K个高频元素。

2025-09-27 19:01:04 193

原创 LeetCode:74.数组中的第K个最大元素

这道题通过堆排序解决,我们建立一个最大堆,将堆顶的K - 1个元素删除,留下的就是第K大的。

2025-09-27 16:16:05 149

原创 LeetCode:73.柱状图中最大的矩形

【代码】LeetCode:73.柱状图中最大的矩形。

2025-09-27 15:49:36 162

原创 LeetCode:72.每日温度

【代码】LeetCode:72.每日温度。

2025-09-27 15:14:42 144

原创 LeetCode:71.字符串解码

这道题用两个栈来解决,一个存放结果,一个存放字符的重复次数。

2025-09-27 14:08:09 330

原创 LeetCode:70.最小栈

最小栈可以通过一个辅助栈来解决,辅助栈只有当前插入值比栈顶元素小的时候才会插入,这样辅助栈的栈顶元素就是栈中的最小值。

2025-09-27 13:44:24 249

原创 LeetCode:69.有效的括号

这道题可以通过栈和哈希表来解决,通过哈希表建立左括号与右括号的映射关系,如果遇到左括号就将对应的右括号入栈,如果遇到右括号就将栈顶元素弹出与之匹配,相等说明匹配成功,否则返回false。

2025-09-27 13:28:43 229

原创 LeetCode:68.寻找两个正序数组的中位数

【代码】LeetCode:68.寻找两个正序数组的中位数。

2025-09-27 10:49:47 245

原创 LeetCode:67.寻找旋转排序数组中的最小值

旋转排序数组符合上面的图,我们用x来表示数组的最后一个元素,如果大于x的话,说明在上半部分的有序区间,如果小于x的话,说明落在了下半部分的有序区间。通过用一个比较值来判断大小。

2025-09-27 09:50:59 398

原创 LeetCode:66.搜索旋转排序数组

旋转后的数组分为了左右两个有序的区间,我们首先需要判断mid落在左部分还是右部分,确定区间后的判断target在mid的左边还是右边。

2025-09-27 09:41:07 228

原创 LeetCode:65.在排序数组中查找元素的第一个和最后一个位置

这道题通过两次二分解决,首先二分左端点,将数组分为左侧<target,右侧>=target,当mid落在左侧时left = mid + 1,落在右侧 right = mid,二分右端点时,左侧<=target,右侧>target,mid落在左侧left = mid, 落在右侧right = mid - 1。

2025-09-27 09:29:03 225

原创 LeetCode:64.搜索二维矩阵

【代码】LeetCode:64.搜索二维矩阵。

2025-09-27 09:16:47 212

原创 LeetCode:63.搜索插入位置

【代码】LeetCode:63.搜索插入位置。

2025-09-27 09:11:45 227

原创 LeetCode:62.N皇后

我们发现每主对角线都符合y = x + b,所以可以写为y - x = b, 但是对于边界的几点例如(1,0)减出来为负数,所以可以统一加上皇后数n来保证正数,所以可以写为y - x + n = b + n,对于N皇后这道题,可以用标志数组来表示这列,主对角线,副对角线是否能存放皇后,那么如何用一个通式来描述。而副对角线符合y = -x + b, 写为y + x = b即可。

2025-09-26 22:16:01 377

原创 LeetCode:61.分割回文串

【代码】LeetCode:61.分割回文串。

2025-09-26 21:21:14 199

空空如也

空空如也

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

TA关注的人

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