程序员阿甘
码龄8年
关注
提问 私信
  • 博客:3,885,022
    社区:318
    问答:301
    动态:763
    3,886,404
    总访问量
  • 888
    原创
  • 7,030
    排名
  • 32,509
    粉丝
  • 1,761
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:安徽省
  • 加入CSDN时间: 2016-11-04
博客简介:

程序员阿甘的博客

查看详细资料
  • 原力等级
    当前等级
    9
    当前总分
    16,721
    当月
    216
个人成就
  • 获得5,372次点赞
  • 内容获得8,469次评论
  • 获得15,149次收藏
  • 代码片获得261,195次分享
创作历程
  • 97篇
    2024年
  • 327篇
    2023年
  • 363篇
    2022年
  • 101篇
    2021年
成就勋章
TA的专栏
  • 华为OD算法刷题笔记
    付费
    590篇
  • 华为校招算法刷题笔记
    付费
    148篇
  • LeetCode刷题笔记
    20篇
  • Java
    47篇
  • JS
    30篇
  • 前端网络
    19篇
  • nodejs
    17篇
  • CSS
    10篇
  • Vue
    6篇
  • webpack
    1篇
  • Linux
    2篇
  • 数据库
    2篇
网易云
创作活动更多

2024 博客之星年度评选报名已开启

博主的专属年度盛宴,一年仅有一次!MAC mini、大疆无人机、华为手表等精美奖品等你来拿!

去参加
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 视频
搜TA的内容
搜索 取消

LeetCode - 850 矩形面积 II

虽然矩形交集很容易求解,但是想要求出所有交集,则需要让每个矩形和剩余其他矩形尝试比较,得出交集。对于 rectangle[i] = [x1, y1, x2, y2],其中(x1,y1)是矩形 i 左下角的坐标, (xi1, yi1) 是该矩形 左下角 的坐标, (xi2, yi2) 是该矩形 右上角 的坐标。上面这种思路就是 ”扫描线算法“,扫描线法可以将 "面" 的问题,分解为 "线" 的问题,将 "矩形(面)交集问题" 降解为 "区间(线)交集问题"。从(1,1)到(2,2),绿色矩形和红色矩形重叠。
原创
发布博客 2024.09.27 ·
1802 阅读 ·
21 点赞 ·
0 评论 ·
25 收藏

LeetCode - 503 下一个更大元素 II

本题相较于 496题 的变化在于,nums 数组是首尾相连的,即 nums[nums.length - 1] 下一个更大元素,可以继续从 nums[0] 开始找。给定一个循环数组 nums ( nums[nums.length - 1] 的下一个元素是 nums[0] ),返回 nums 中每个元素的 下一个更大元素。数字 x 的 下一个更大的元素 是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。输入: nums = [1,2,3,4,3]
原创
发布博客 2024.09.25 ·
697 阅读 ·
3 点赞 ·
0 评论 ·
9 收藏

LeetCode - 496 下一个更大元素 I

对于每个 0 <= i < nums1.length ,找出满足 nums1[i] == nums2[j] 的下标 j ,并且在 nums2 确定 nums2[j] 的 下一个更大元素。- 4 ,用加粗斜体标识,nums2 = [1,3,4,2]。不存在下一个更大元素,所以答案是 -1。- 1 ,用加粗斜体标识,nums2 = [1,3,4,2]。输入:nums1 = [4,1,2], nums2 = [1,3,4,2].输入:nums1 = [2,4], nums2 = [1,2,3,4].
原创
发布博客 2024.09.25 ·
907 阅读 ·
8 点赞 ·
0 评论 ·
11 收藏

LeetCode - 17 电话号码的字母组合

因此 "23" 对应的组合有:"ad"、"ae"、"af"、"bd"、"be"、"bf"、"cd"、"ce"、"cf"输出:["ad","ae","af","bd","be","bf","cd","ce","cf"]因此,如果我们可以遍历出该树形结构的每一条分支,那么就能求出所有组合。如果画图表示的话,可以发现组合问题的求解过程,可以形成一个树形结构。该树形结构的每一条根到叶子节点的路径都对应一个组合。本题是一个组合问题,可以使用回溯算法解题。输出:["a","b","c"]输入:digits = "2"
原创
发布博客 2024.09.11 ·
894 阅读 ·
4 点赞 ·
0 评论 ·
11 收藏

LeetCode - 16 最接近的三数之和

本题要求的是最接近taget的三数之和,因此我们在找三元组的过程中,只要保留和target差距最小的三元组之和即可。解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)。解释:与 target 最接近的和是 0(0 + 0 + 0 = 0)。输入:nums = [-1,2,1,-4], target = 1。输入:nums = [0,0,0], target = 1。一致,具体逻辑,可以看下这篇博客。中选出三个整数,使它们的和与。假定每组输入只存在恰好一个解。
原创
发布博客 2024.09.10 ·
626 阅读 ·
5 点赞 ·
0 评论 ·
6 收藏

LeetCode - 15 三数之和

因此当 nums[i] == nums[i-1] 时,我们就可以跳过 nums[i] 产生三元组的过程,因为必然和 nums[i-1] 产生的三元组发生重复。我们返回的结果是一个 int** 类型的,主要记录不重复的三元组,比如 [[-1,-1,2], [-1,0,1]],可以发现返回值本质是一个二维数组。比如对于返回值 [[-1,-1,2], [-1,0,1]] 来说,returnSize = 2,returnColumnSizes = [3, 3]输出:[[-1,-1,2],[-1,0,1]]
原创
发布博客 2024.09.09 ·
1255 阅读 ·
11 点赞 ·
0 评论 ·
17 收藏

LeetCode - 14 最长公共前缀

我们可以假设最长公共前缀 prefix = strs[0],然后遍历其余 strs[i] 和 prefix 取最长公共前缀后,更新 prefix。输入:strs = ["flower","flow","flight"]输入:strs = ["dog","racecar","car"]编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。解释:输入不存在公共前缀。
原创
发布博客 2024.09.01 ·
437 阅读 ·
8 点赞 ·
0 评论 ·
4 收藏

LeetCode - 13 罗马数字转整数

通常情况下,罗马数字中小的数字在大的数字的右边。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。例如, 罗马数字 2 写做 II ,即为两个并列的 1。解释: M = 1000, CM = 900, XC = 90, IV = 4.罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。输入: s = "MCMXCIV"情况1,每个罗马数字都是独立的。输入: s = "LVIII"输入: s = "III"输入: s = "IV"输入: s = "IX"
原创
发布博客 2024.09.01 ·
821 阅读 ·
13 点赞 ·
0 评论 ·
21 收藏

LeetCode - 12 整数转罗马数字

罗马数字是通过添加从最高到最低的小数位值的转换而形成的。3000 = MMM 由于 1000 (M) + 1000 (M) + 1000 (M)700 = DCC 由于 500 (D) + 100 (C) + 100 (C)首先,我们需要配置: 阿拉伯数字 和 罗马数字 的映射表。注意:49 不是 50 (L) 减 1 (I) 因为转换是基于小数位。40 = XL 由于 50 (L) 减 10 (X)9 = IX 由于 10 (X) 减 1 (I)这里我的策略是定义两个数组:nums 和 romans。
原创
发布博客 2024.09.01 ·
1016 阅读 ·
23 点赞 ·
0 评论 ·
14 收藏

LeetCode - 11 盛最多水的容器

也就是说 h[R1] * (R1 - L1 + 1) 的结果是肯定大于 h[L] * (R - L + 1) 的,因此这里 L 虽然没有匹配到最优高柱 R1,但是 R1 作为矮柱时的容器肯定比当前 R1 作为高柱时的容器盛水更多。容器内水的容量大小 V,取决于容器两端中的较短柱子h_min,因此为了使得容器内水尽可能的多,我们应该找到距离 h_min 柱子最远的,且高度>= h_min 的另一个柱子。解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。输入:height = [1,1]
原创
发布博客 2024.09.01 ·
1012 阅读 ·
25 点赞 ·
0 评论 ·
21 收藏

LeetCode - 10 正则表达式匹配

所谓动态规划,即递推,从简单易解的小问题的结果,逐步递推出,复杂难解的大问题的结果。
原创
发布博客 2024.09.01 ·
1797 阅读 ·
27 点赞 ·
4 评论 ·
25 收藏

LeetCode - 9 回文数

回文数的特点是正序和倒序都一样,比如整数 121 的倒序也是 121,因此 121 是回文数。给你一个整数 x ,如果 x 是一个回文整数,返回 true;否则,返回 false。解释:从左向右读, 为 -121。从右向左读, 为 121-。因此它不是一个回文数。回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数。解释:从右向左读, 为 01。例如,121 是回文,而 123 不是。注意:按照题目要求,本题负数都不是回文数。输入:x = -121。输入:x = 121。
原创
发布博客 2024.08.30 ·
25651 阅读 ·
8 点赞 ·
0 评论 ·
14 收藏

LeetCode - 8 字符串转换整数 (atoi)

第 2 步:"1337c0d3"(当前没有读入字符,因为这里不存在 '-' 或者 '+')第 2 步:"0-1" (当前没有读入字符,因为这里不存在 '-' 或者 '+')第 3 步:"0-1" (读入 "0";第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')第 2 步:" -042"(读入 '-' 字符,所以结果应该是负数)第 3 步:" -042"(读入 "042",在结果中忽略前导零)第 1 步:"0-1" (当前没有读入字符,因为没有前导空格)
原创
发布博客 2024.08.30 ·
1453 阅读 ·
17 点赞 ·
0 评论 ·
29 收藏

LeetCode - 7 整数反转

需要注意的是,本题的 x 虽然取值范围限制在了 int 范围内,但是 x 反转后的数值是可能超出 int 范围的,但是不会超出 long 范围,因此反转后的数 res 我们应该使用 long 来记录。但是需要注意的是:(1 << 31) 的结果居然是负数?比如我们表示 2^31 - 1,可能会使用 pow(2, 31) - 1,或者 (1 << 31) - 1。给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。还有一点,本题暴露了python的一个问题,那就是 python 的。
原创
发布博客 2024.08.30 ·
765 阅读 ·
4 点赞 ·
0 评论 ·
6 收藏

LeetCode - 6 Z 字形变换

本题,我们可以定义一个长度 numRows 的字符串数组,对应于结果排列的各行。之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"。无论直边的填充,还是斜边的填充,填充顺序都是固定的,即字符串 s 的遍历顺序。输入:s = "PAYPALISHIRING", numRows = 3。输入:s = "PAYPALISHIRING", numRows = 4。输入:s = "A", numRows = 1。输出:"PAHNAPLSIIGYIR"
原创
发布博客 2024.08.29 ·
1178 阅读 ·
28 点赞 ·
0 评论 ·
21 收藏

LeetCode - 5 最长回文子串

基于最简回文子串,我们向其两端扩展,比如最简回文子串的范围是 s[i],那么可以定义 L = i , R = i,只要 s[L] == s[R],则回文子串扩展成功,新的回文子串范围是 s[L, R],然后按此逻辑继续扩展 L--,R++,直到发现 s[L]!同理,比如最简回文子串时 s[i, i+1],那么可以定义 L = i ,R = i + 1,只要 s[L] == s[R],则回文子串扩展成功,新的回文子串范围是 s[L, R],然后按此逻辑继续扩展 L--,R++,直到发现 s[L]!
原创
发布博客 2024.08.29 ·
615 阅读 ·
5 点赞 ·
0 评论 ·
6 收藏

LeetCode - 4 寻找两个正序数组的中位数

题目来源4. 寻找两个正序数组的中位数 - 力扣(LeetCode)题目描述给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。示例 1输入:nums1 = [1,3], nums2 = [2]输出:2.00000解释:合并数组 = [1,2,3] ,中位数 2示例 2输入:nums1 = [1,2], nums2 = [3,4]
原创
发布博客 2024.08.29 ·
842 阅读 ·
24 点赞 ·
0 评论 ·
14 收藏

LeetCode - 3 无重复字符的最长子串

为什么是128长度的数组呢?即定义两个指针 L,R,初始时 L,R 都初始化为0,表示 s 串的 [L, R)区间为一个滑动窗口。这里我们可以定义一个128长度的数组index,或者一个哈希表来记录 R 指针扫描过的字符及其出现的索引位置。请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
原创
发布博客 2024.08.29 ·
1132 阅读 ·
23 点赞 ·
0 评论 ·
14 收藏

LeetCode - 2 两数相加

给你两个 非空 的链表,表示两个非负的整数。为了代码简单,我们可以总是保证 l1 是较长链表(如果 l1 是较短的,则互换 l1 和 l2)。首先:判断出 l1 和 l2 两个链表哪个长,我们以较长的链表作为基础,即将较短的链表。输入:l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]输入:l1 = [2,4,3], l2 = [5,6,4]输入:l1 = [0], l2 = [0]输出:[8,9,9,9,0,0,0,1]较长的链表中,避免创建新链表。输出:[7,0,8]
原创
发布博客 2024.08.29 ·
1133 阅读 ·
9 点赞 ·
0 评论 ·
17 收藏

LeetCode - 1 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。你可以按任意顺序返回答案。
原创
发布博客 2024.08.29 ·
1148 阅读 ·
8 点赞 ·
0 评论 ·
17 收藏
加载更多