- 博客(105)
- 问答 (2)
- 收藏
- 关注
原创 代码随想录算法训练营第十一天|150.逆波兰表达式求值、239.划定窗口最大值、347.前K个高频元素
采用map的key和value的方式,key记录数组值,value记录元素出现的次数。给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。输入:nums = [1,3,-1,-3,5,3,6,7], k = 3。输入: nums = [1,1,1,2,2,3], k = 2。返回一个表示表达式值的整数。
2024-07-22 14:59:31 323
原创 代码随想录算法训练营第十天|232.用栈实现队列、225.用队列实现栈、20.有效的括号
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。boolean empty() 如果栈是空的,返回 true;遇到左括号将对应的有括号加到栈中,遇到有括号时匹配。void push(int x) 将元素 x 推到队列的末尾。int pop() 从队列的开头移除并返回元素。int peek() 返回队列开头的元素。
2024-07-21 16:01:05 415
原创 代码随想录算法训练营第九天|151.翻转字符串里的单词、55.右旋转字符串、28.实现strStr()、459.重复的子字符串
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。:判断字符串s是否由重复子串组成,只要两个s拼接在一起,里面还出现一个s的话,就说明是由重复子串组成。第二行为字符串 s,代表需要旋转的字符串。
2024-07-21 15:24:36 345
原创 代码随想录算法训练营第八天|344.反转字符串、541.反转字符串||、54.替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。:重新理解题目,每隔2K个反转前K个,尾数不够K个的时候全部反转。
2024-07-15 11:59:30 289 1
原创 代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、02.07.链表相交、142.环形链表||
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2。解释:链表中有一个环,其尾部连接到第二个节点。
2024-07-15 11:58:52 379
原创 代码随想录算法训练营第四天|24.两两交换链表中的节点、19.删除链表的倒数第N个节点、02.07.链表相交、142.环形链表||
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2。解释:链表中有一个环,其尾部连接到第二个节点。
2024-07-14 16:30:34 320
原创 代码随想录算法训练营第七天|454.四数相加||、383.赎金信、15.三数之和、18.四数之和
给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]输入:nums = [1,0,-1,0,-2,2], target = 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输出:[[-1,-1,2],[-1,0,1]]
2024-07-14 14:07:01 458
原创 Set和Map的用法
检查键值是否存在:containsKey。检查元素是否存在:contains。删除键值对:remove。获取键值对数量:size。删除元素:remove。获取集合大小:size。
2024-07-14 11:01:42 233
原创 代码随想录算法训练营第六天|哈希表理论基础、242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。:因为只包含小写字母,所以确定了数组的大小,那么根据数组下标对应的值来判断两个字符串出现字符的次数是否相等即可。注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
2024-07-14 10:41:12 274
原创 代码随想录算法训练营第三天|703.移除链表元素,707.设计链表,206.反转链表
将要移除的元素的前一个节点的next指向目标节点的next。就是连接跳过这个节点,将前一个节点直接连在后一个节点上。以指示链表中的上一个节点。假设链表中的所有节点下标从。你可以选择使用单链表或者双链表,设计并实现自己的链表。,请你反转链表,并返回反转后的链表。是指向下一个节点的指针/引用。,删除和添加节点要进行下标检验。如果是双向链表,则还需要属性。,请你删除链表中所有满足。:定义链表节点,初始化链表。给你一个链表的头节点。703.移除链表元素。
2024-07-14 09:48:06 314
原创 代码随想录算法训练营第二天|977.有序数组的平方,209.长度最小的子数组,59.螺旋矩阵||
因为数组是非递减的,且包含负数,那么平方之后最大的数就是原数组两边的数。将两者相加判断两边的绝对值谁最大,最后从结果数组的最右边开始填入结果。:滑动窗口,当sum等于目标值时开始移动窗口。需要注意的是,res要放入while循环中,否则会漏掉一部分答案。,并返回其长度**。**如果不存在符合条件的子数组,返回。首先确定循环圈数为n/2,然后确定边界开始模拟。所有元素,且元素按顺时针顺序螺旋排列的。个正整数的数组和一个正整数。组成的新数组,要求也按。209.长度最小的子数组。977.有序数组的平方。
2024-07-09 16:13:43 377
原创 代码随想录算法训练营第一天|704. 二分查找,27. 移除元素,35.搜索插入位置,34.在排序数组中查找元素的第一个和最后一个位置
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。如果数组中不存在目标值 target,返回 [-1, -1]。二分的时候,只找左边界,也就是即使找到了右边界也接着二分。:移除元素,那就将不等于目标值的元素重新赋值给数组。34.在排序数组中查找元素的第一个和最后一个位置。,如果目标值存在返回下标,否则返回。
2024-07-09 15:25:42 302
原创 鸿蒙学习(二)
Search:搜索框组件,适用于浏览器的搜索输入内容输入框等应用场景。placeholderColor:placeholder文本颜色。placeholderFont:placeholder文本样式。堆叠容器,子组件按照先后顺序依次退爹,覆盖前一个子组件。searchButton:搜索框末尾搜索按钮文本内容。placeholder:无输入时的提示文本。####5、HttpRequest 请求。value:当前显示的文本搜索内容。textTont:搜索框内文本样式。textAlign:搜索框对齐方式。
2024-06-30 16:31:39 499
原创 代码随想录算法训练营 总结篇
虽然已经大三了,但是没有系统的刷过算法。其实训练营的价格对我来说是稍贵的,但是我这个拖拉又摆烂的性子,如果没有人监督,那肯定是三天打鱼两天晒网,坚持不下来的,更何况还有作业、课设一些东西会让我没有时间去刷算法,于是决定还是报名参加,毕竟都已经大三了呀。除此之外,有不懂的问题是最方便寻求解决方案的,群里的朋友们都很热心,会耐心的为你解决问题。我就是在看别人博客的时候发现了一个同学,他每天都会完成当天的训练,有时候我来不及写题的时候,就会去看看他的博客,看他每天写题,我也有了点动力,想着不要落后啊!
2024-05-10 23:00:12 439
原创 代码随想录算法训练营第六十三天|84.柱状图中最大的矩形
个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。:找到当前元素的左右两边比它小的值。求在该柱状图中,能够勾勒出来的矩形的最大面积。84.柱状图中最大的矩形。
2024-05-10 22:59:32 264
原创 代码随想录算法训练营第六十三天|84.柱状图中最大的矩形
个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1。:找到当前元素的左右两边比它小的值。求在该柱状图中,能够勾勒出来的矩形的最大面积。84.柱状图中最大的矩形。
2024-05-10 22:39:34 240
原创 代码随想录算法训练营第六十二天|503.下一个更大元素II、42.接雨水
单调栈解法,因为是递增的栈,所以当遇到比栈顶元素大时,此时栈顶元素就找到了左边第一个大的值和右边最大的一个值,求两者的差即可。是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。:两个数组模拟转圈的过程,可以重新定义一个数组,这个数组将原数组拼接两次,就模拟了转圈的过程。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。个非负整数表示每个宽度为。503.下一个更大元素II。
2024-05-10 22:20:39 253
原创 代码随想录算法训练营第六十一天|739.每日温度、496.下一个更大元素I
单调栈解法的实现:用一个栈来保存我们遍历过的值,如果需要的是第一个大于的值,那么栈的顺序是递增的,反之则是递减的。使用单调栈需要判断大于、小于、等于的情况。大于和小于的情况根据题意,递增大于需要while循环,递减小于也是。天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用。:嗯,这个题目的意思表达真的是让人看不懂啊。如果不存在下一个更大元素,那么本次查询的答案是。,表示每天的温度,返回一个数组。需要一个map映射关系。时间复杂度为O(n)。496.下一个更大元素。
2024-05-10 10:49:08 303
原创 代码随想录算法训练营第六十天|647.回文字串、516.最长回文子序列
子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。,找出其中最长的回文子序列,并返回该序列的长度。:和上一题相比,这题多了一个条件是字符可以不连续。是字符串中的由连续字符组成的一个序列。是正着读和倒过来读一样的字符串。,请你统计并返回这个字符串中。516.最长回文子序列。
2024-05-05 15:02:11 212
原创 代码随想录算法训练营第五十六天|583.两个字符串的删除操作、72.编辑距离
可以发现插入和删除就是上一个的情况,这个题与上一个题相比是多了一个替换的情况,替换的话就从前一个相等的情况延续下来,替换步数加一。 两个元素相等,删除其中一个或者两个都删,不过两个都删除的情况是包含在删除其中一个的情况中的 dp[i]j=min(dp[i-1]j+1,dp[i]j-1+1)dp[i]j :以i-1为结尾和以 j-1 为结尾的两个字符串相同需要删除的最小步数。递推公式:两个元素相等,不删 dp[i]j=dp[i-1]j-1。可以删除任意一个字符串中的一个字符。
2024-05-03 09:27:09 309
原创 代码随想录算法训练营第五十五天|392.判断子序列、115.不同的子序列
思想都是一样的,不同的是因为考虑的是有多少个,所以当两个字符串的元素相等时,s中的元素可以使用也可以不使用,两种情况的总和。另一个不同的点在于初始化,如果t是空串的话,字符串中有1个空串,反之则有0个。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。:和最长相同子序列的思路是一样的,如果相同子序列的长度等于短的那个字符串的话,它就是另一个字符串的子序列。dp[i]j :以 i-1 和 j-1 为结尾的字符串的最长相同子序列的长度。115.不同的子序列。
2024-05-02 23:25:32 494
原创 代码随想录算法训练营第五十三天|1143.最长公共子序列、1035.不相交的线、53.最大子序和
如果当前它们不相等,那要考虑1的前一位和2的当前位,以及2的前一位和1的当前位是否相等。递推公式 :如果两个元素相等,那就是最长重复子数组的情况 dp(i,j)=max(dp(i-1,j-1)+1,dp(i,j))是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。:这个题贪心写过,贪心的思想是只要相加的和是正数,那么就加上这个值,不是的话就sum=0,重新开始即可。:这个题和上一个题是一样的,只是描述不一样。
2024-04-28 15:41:16 354
原创 代码随想录算法训练营第五十二天|300.最长递增子序列、674.最长连续递增序列、718.最长重复子数组
是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。:两层for循环,一层找到i,下一层遍历从0 到i 的小于nums[i] 的值。这个条件,既然是连续的话,只需要考虑当前元素和前一个元素的关系即可。给定一个未经排序的整数数组,找到最长且。:求两个数组的最长公共子序列的最大长度。,找到其中最长严格递增子序列的长度。、长度最长的子数组的长度。674.最长连续递增序列。300.最长递增子序列。,并返回该序列的长度。)确定,如果对于每个。就是连续递增子序列。:在上一题的基础上加了。
2024-04-28 13:57:18 322
原创 代码随想录算法训练营第五十一天|309.最佳买卖股票的时机含冷冻期、714.买卖股票的最佳时机函手续费
在买卖股票II的基础上增加了一个冷冻期,冷冻期是在卖出股票的后一天,所以要将不持有股票的状态分开来,分成保持卖出状态和卖出状态,这样才能找到冷冻期,也就是本题有4个状态。这个题目描述有点模糊啊,每一笔交易都要支付手续费的话不应该是买入要手续费,卖出也要手续费吗,这个通过代码买入和卖出只需要一笔手续费。**注意:**这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。dp解题步骤和买卖股票的最佳时机II是一样的,在那个代码的基础上减去手续费即可。代表了交易股票的手续费用。
2024-04-28 10:24:10 280
原创 代码随想录算法训练营第五十天|123.买卖股票的最佳时机III、188.买卖股票的最佳时机IV
dp[0] 3]=-price[0] //第一天买入,然后卖出,然后再买入。因为可以有k次买卖,也就是k次买入,k次卖出,那么二维数组的大小就需要是 2*k+1。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。**注意:**你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。观察后能发现,奇数是买入,偶数是卖出,OK,现在开始写代码吧。设计一个算法来计算你所能获取的最大利润。设计一个算法来计算你所能获取的最大利润。初始化:dp[0] 0]=0。
2024-04-27 21:42:30 386
原创 代码随想录算法训练营第四十九天|121.买卖股票的最佳时机、122.买卖股票的最佳时机II
不持有: dp[i] 0] =max(dp[i -1[0],dp[i-1] 1]+ price[i]):和上一题的区别在于,这个股票可以每天都买进或是卖出,上一题只能买一次卖一次,这个题可以买卖多次。:每天的两支股票都有两种状态,持有和不持有,所以用一个二维数组表示每天每支股票的状态。递推公式:持有:dp[i] 1] =max(dp[i-1][1 ,-price [i)dp[i] 1]: **持有 **第 i 天的这支股票的最大金额。dp[i] 1 :今天持有。
2024-04-27 20:42:28 279
原创 代码随想录算法训练营第四十八天|198.打家劫舍、213.打家劫舍II、337.打家劫舍III
将环的问题转换成线性问题,分别考虑只取首或尾的情况,然后取两者的最大值即可。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,每个节点都有两种状态,偷和不偷,用dp[0]表示不偷,dp[1]表示偷,那么dp数组的大小就为2.同时,相邻的房屋装有相互连通的防盗系统,是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。337.打家劫舍III。
2024-04-27 18:23:12 1569
原创 代码随想录算法训练营第四十六天|139.单词拆分、背包问题总结
递推公式 :dp[j] 是true,且 [j, i] 这个区间的子串出现在字典里,那么dp[i]一定是true。所以递推公式是 if([j, i] 这个区间的子串出现在字典里 && dp[j]是true) 那么 dp[i] = true。dp[i] : 长度为 i 的字符串是否能被字典中的单词组成的结果是 dp[i]**注意:**不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。:单词的组成是有顺序的,所以是一个完全背包的排列问题。遍历顺序:排列问题,先背包后物品。
2024-04-20 20:50:02 401
原创 代码随想录0.算法训练营第四十三天|1049.最后一块石头的重量II、494.目标和、474.一和零
也是一个分集合问题,将元素分为加法和减法两个集合。有多少个加法集合或者是多少个减法集合就有多少种方法。:把石头总和分成近似相等的两堆,然后让他们相撞。每个石头只能取一次,就是一个一维的01背包问题。背包的容量有两个维度,也就是在往背包中装物品的时候需要考虑两个方面。i++){ //物品。j–){ //背包。,然后将它们一起粉碎。假设石头的重量分别为。,然后串联起所有整数,可以构造一个。的最大子集的长度,该子集中。有一堆石头,用整数数组。
2024-04-18 10:20:29 368
原创 代码随想录算法训练营第四十二天|01背包问题(二维、一维)、416.分割等和子集
01背包问题:回溯遍历每种物品取和不取的价值,时间复杂度是2^n。 不放物品 i : dp[i-1][j //取0 - i-1个物品的价值 放入物品 i :dp[i-1] j-wight i +value[i] //放入物品 I 后需要加上i 的价值并且背包容量要减去i的重量卡码网46.携带研究材料。
2024-04-16 22:38:15 397
原创 代码随想录算法训练营第四十一天|343.整数拆分、96.不同的二叉搜索树
将数字尽可能拆分成m个近似相等的子数,这样乘积才最大。递推公式:二叉树的个数=左子树的个数*右子树的个数。dp[i]:输入 i 有 dp[i]种不同的二叉树。返回满足题意的二叉搜索树的种数。初始化:dp[0]=0 dp[1]=1。),并使这些整数的乘积最大化。个节点组成且节点值从。96.不同的二叉搜索树。你可以获得的最大乘积。
2024-04-16 19:50:51 169
原创 代码随想录算法训练营第三十九天|62.不同路径、63.不同路径II
机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?:和不同路径方法是一样的,不同的地方在于这个题需要考虑障碍问题。网格的左上角 (起始点在下图中标记为 “Start” )。网格的左上角 (起始点在下图中标记为 “Start” )。网格中的障碍物和空位置分别用。问总共有多少条不同的路径?
2024-04-14 19:31:34 288
原创 代码随想录算法训练营第三十八天|509斐波那契数、70.爬楼梯、746.使用最小花费爬楼梯
个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。开始,后面的每一项数字都是前面两项数字的和。你有多少种不同的方法可以爬到楼顶呢?请你计算并返回达到楼梯顶部的最低花费。746.使用最小花费爬楼梯。表示)形成的序列称为。
2024-04-14 18:36:01 192
原创 代码随想录算法训练营第三十七天|738.单调递增的数字、968.监控二叉树
将数字转换为String类型,然后从后往前遍历,让遇到前一位比后一位大的时候,前一位减一,后面几位全部变成9。:从下往上遍历二叉树,然后在二叉树的父节点放置摄像头,之后每隔两个空节点再放置一个摄像头。给定一个二叉树,我们在树的节点上安装摄像头。计算监控树的所有节点所需的最小摄像头数量。当且仅当每个相邻位数上的数字。节点上的每个摄影头都可以监视。的最大数字,且数字呈。738.单调递增的数字。时,我们称这个整数是。
2024-04-11 12:46:37 272
原创 代码随想录算法训练营第三十六天|435.无重叠区间、763.划分字母区间、56.合并区间
先将前一个数组加入到结果集中,合并就直接更新右边界即可。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。在遍历字符串的时候,记录每个字符出现的最远的位置。:求重叠区间,重叠区间数就是要移除的区间数。需要移除区间的最小数量,使剩余区间互不重叠。返回一个表示每个字符串片段的长度的列表。表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回。
2024-04-10 20:08:48 317
原创 代码随想录算法训练营第三十五天|860.柠檬水找零、406.根据身高重建队列、452.用最少数量的箭引爆气球
现根据身高从大到小进行排序,然后看它前面有多少个人,再插入到对应的位置即可。有一些球形气球贴在一堵用 XY 平面表示的墙面上。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付。处射出一支箭,若有一个气球的直径的开始和结束坐标为。表示队列中一些人的属性(不一定按顺序)。假设有打乱顺序的一群人站成一个队列,数组。你不知道气球的确切 y 坐标。顾客排队购买你的产品,(按账单。在柠檬水摊上,每一杯柠檬水的售价为。注意,一开始你手头没有任何零钱。:记录每张面额的数量,用于找零。支付的顺序)一次购买一杯。
2024-04-09 19:53:22 243
空空如也
java swing中main 方法报错
2022-04-04
java swing 继承jframe
2022-04-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人