- 博客(27)
- 收藏
- 关注
原创 leetcode560 和为k的子数组
少写 map.put(0, 1) 会让“从第 0 个元素开始就一直累加到某个位置正好等于 k”的情况被漏掉。如果 前缀和[j] - 前缀和[i] = k,那么子数组 nums[i+1 …j] 的和就是 k。我们只要知道之前有多少个前缀和等于 pre - k,就能立刻知道以当前位置结尾的合法子数组有多少个。给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数。前缀和[i] = 前缀和[j] - k。子数组是数组中元素的连续非空序列。map.put(0,1)不能少!
2025-09-28 17:34:49
144
原创 leetcode438 找到字符串中所有字母异位词
若采用滑动窗口,则将p长度的窗口从s的头部滑到尾部,采用两个数组记录26个英文字母在s和p出现的次数。初始时数组s数组只记录到p长度的字母出现次数,表示p长度的滑动窗口与s的0索引位置对齐,之后往后移动滑动窗口。可直接采用排序的思想,将字符串转为字符数组,用sort进行排序。对于字符串s,每次截取长度为字符串p长度的字符串进行排序比较,如果相同,则说明该子串是p的异位词。给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
2025-09-28 15:23:28
131
原创 Java无重复字符最长字串
滑动窗口的思想给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。从左往右寻找无重复的字符,左右两个指针构成滑动窗口,右指针往后,当滑动窗口中出现重复时,左指针右移,缩小滑动窗口的范围,直到窗口内没有重复字符为止。
2025-09-25 21:05:01
194
原创 字母异位词分组
getOrDefault()根据键获取对应的值,如果键不存在,则返回指定的默认值,这里在map中查找key值,若不存在则返回一个新的数组用以存储。用到排序和hashmap。
2025-08-20 23:01:49
197
原创 leetcode三数之和
采用双指针, 左加右减移动两个指针,判断两数之和与-nums[i]的大小。若和大,则将两数中较大的数变小,即左移right指针(right–);若相等,则将三个数存入数组之中。思路:对数组排序,对于当前第i个元素,寻找i之后的元素中,是否有两个元素相加得到nums[i]的相反数。即满足nums[left] + nums[right] = -nums[i];当和相等之后,移动指针时要判断左右两个指针所指的数是否与前后相同,不然会存入重复的数组。这里使用while循环与前一个数比较,直至重复数跳过。
2025-08-18 15:55:29
245
原创 回文数的判断
这种方法虽然简单,但是其是对字符串进行的操作,而题目要求的是整数型,则还需用到字符型和整型之间的转换。回文数的判断关键在于正序和倒序一样,那么将数字逆序之后得到的数字也将与原数字相同,以此为判断标准。利用StringBuilder中的reverse方法,可以不需要对其遍历,就能得到逆转后的字符串。
2025-04-28 14:46:09
203
原创 动态规划学习记录
给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的移动路径中不能包含 任何 有障碍物的方格。返回机器人能够到达右下角的不同路径数量。
2025-02-26 15:42:03
291
原创 简单动态规划问题
简单动态规划每一格只能由其上一格或者左一格走过来,也就是这两格已有的步数之和。dp[i][0]、dp[0][j]都为边界条件,设置为1;int。
2024-03-18 15:53:57
385
原创 柠檬水找零
注意:如果是字符串到整形的映射,必须使用string而不是char数组。需要建立字符(或字符串)与整数之间映射的题目,使用map可以减少代码量。使用map要确定映射前类型(键key)和映射后的类型(值value)。本题逻辑很简单,也是贪心算法的一个例子。(用法如果后期遇到了再写)
2024-03-17 21:11:34
409
1
原创 字符串转整数
这里在下溢出时总是返回正上界,无法返回正确的下界,以为是我下界计算失误,检查后发现并没有。于是查看循环条件发现这里在进行判断时,已经将符号摘出去了,所以无论如何都不可能出现负数的情况,也就不可能出现下溢出且返回下边界。于是进行修改,添加sign的判断条件,当sign=-1时,直接返回下边界。需要判断是否越界,INT_MAX、INT_MIN为int类型的上下界。一定要判断是否越界,不然会出现runtime error的错误。
2024-03-13 20:43:47
412
原创 下一个序列
找到pos之后大于nums[pos-1]且为后搬序列的最小值,将其与pos位置的元素交换。按照字典序,需要对交换后的序列再进行调整排序。所以在找到pos位置之后,先将后续序列进行逆置reverse,此时后半数组为升序,再找到满足大于nums[pos-1]的最小值交换即可。先从后往前找到一个不符合升序的数,记录其下标为pos,则此时。
2024-03-10 21:09:41
427
1
原创 盛水最多的容器
给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])。用两个指针i和j,i指向数组头部,从前往后遍历,j指向后部,从后往前遍历。每次计算面积要用较短的元素相乘。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
2024-03-08 12:05:56
417
1
原创 无重复字符的最长子串
find()——查找指定值,找到返回迭代器,没找到返回end()给定一个字符串 s ,请你找出其中不含有重复字符的 最长。insert()——插入元素。count()——出现次数。erase()——删除元素。
2024-03-07 19:28:33
389
原创 有效的完全平方数
给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false。进阶:不要 使用任何内置的库函数,如 sqrt。输入:num = 16。
2022-09-20 14:11:49
127
原创 转轮数组C++
给你一个数组,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。输入: nums = [1,2,3,4,5,6,7], k = 3。向右轮转 1 步: [7,1,2,3,4,5,6]向右轮转 2 步: [6,7,1,2,3,4,5]向右轮转 3 步: [5,6,7,1,2,3,4]输出: [5,6,7,1,2,3,4]
2022-09-19 15:56:09
395
原创 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。输入: nums = [1,3,5,6], target = 7。请必须使用时间复杂度为 O(log n) 的算法。python我写的很复杂,应该可以更简单。搜索插入位置 C++、python。核心思想是二分查找。
2022-09-18 14:44:52
202
原创 二分查找C++
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。输入: nums = [-1,0,3,5,9,12], target = 9。解释: 9 出现在 nums 中并且下标为 4。
2022-09-18 14:20:00
410
原创 最后一个单词的长度(python)
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。输入:s = " fly me to the moon "输出:4解释:最后一个单词是“moon”,长度为4。
2022-08-21 13:57:47
278
原创 加一(python)
给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
2022-08-20 17:23:21
801
原创 flex 弹性盒模型
弹性盒模型一、对容器的控制display:flex;display:inline-flex;改变元素的方向默认水平排列flex-direction: row/column/row-reverse(反转);控制元素溢出flex-wrap:wrap; 控制元素换行flex-wrap:wrap-reverse;反折统一设置:flex-flow:row wrap;主轴的对齐justify-content:flex-start/ flex-end/ center/ sp
2021-01-23 11:17:38
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅