代码随想录
文章平均质量分 81
魔理沙偷走了BUG
万年的铁树要开花
展开
-
【代码随想录刷题记录】LeetCode904水果成篮
的条件魔改一下,不再求minlen=min(minlen, right - left + 1),而是求max_len = max(max_len , right -left + 1),使用哈希表来作为水果篮子,键为水果类别编号,值为该类别的水果数量,而且for循环中的while循环条件也变一下,即哈希表的长度如果大于2(即两个水果篮子只能装下两个类别的水果,突然来了个第三类别的水果,装不下了),则让哈希表中fruits[left]这个键对应的值减少,并让left指针右移,直到哈希表中有两个类的水果。原创 2024-05-01 11:59:43 · 225 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode209长度最小的子数组
(也就是for循环完成一次循环)。我最开始的想法是用一个for循环外的遍历len来记录子数组的长度,fast每次增加,len++,如果不满足条件len–,直到不满足题目要求的条件,但是这样做是错的,比如nums为[1],而target为7,这种情况下,我们永远找不到满足条件的子数组,因为我们永远没法进入while循环条件,因为sum=1<7,所以我们也没法执行len–操作,这样就导致本应该返回0,现在却返回了错误的值1。原创 2024-04-30 11:30:56 · 469 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode977有序数组的平方
的时间复杂度的算法,之前写的一些题目都是双指针,我也想到了双指针,但是双指针怎么设置才能有效呢?一种简单的方法就是暴力法,给每个数平方后再排序,但是时间复杂度不好看,于是我们考虑一种。这个改成for循环就和卡尔老师写的差不多了,思路我写在上面了,这次就不验证了。原创 2024-04-29 11:25:23 · 602 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode844比较含退格的字符
那我们再一次回看这个删除的区间和现在的这个题目,我们要删除的是#和#之前的字符,那我们的删除的区间就是[slow-1,fast),那就说明, fast所指元素在遍历的时候如果是#(也就是增加了一个else条件),那就应该让slow自减,但是slow自减只有在slow下标合法也即slow不是0的时候才能自减,我们把上面那个数组换成字符串即[a,b,#,#,c]这个时候,循环就停止了,slow是新数组的长度,但是我们仔细看到这个删除的过程,在最后一轮循环的时候,删除的范围是[slow, fast),即。原创 2024-04-28 12:35:53 · 940 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode283移动零
这个题只要想明白将原来的OnO(n)Onpublic://模仿O(n)的删除数组元素的方法删除0//if条件由nums[fast]!=val改成nums[fast]!=0//但是这次不是仅仅nums[slow]=nums[fast],而是将它们两个交换//临时变量存储交换值fast++)=0)//交换元素位置slow++;原创 2024-04-27 10:23:58 · 665 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode26删除有序数组中的重复项
我们从这个代码可以知道,当当前值不等于目标值的时候,才进行nums[slow]=nums[fast]这样的向前赋值,于是我们需要魔改一下这个if的条件,删掉重复的元素,保留一个元素,那就是说,当nums[fast] == nums[fast + 1]的时候,我们才删除,让slow等一下,fast自增,然后再赋值,但是fast + 1很有可能出现越界的情况(也就是fast迭代到最后的情况),所以就要分类讨论,但是分类讨论的结果到底应该是什么,我们需要探究一下,我们先写一个这样一个不完整的代码来探究一下(原创 2024-04-26 15:05:49 · 1283 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode27移除元素
当目标值val和数组nums[i]的值不一样的时候,不删除当前元素,fast和slow都继续向前走,但是在向前走之前,还要执行nums[slow]=nums[fast],因为可能之前还删除过元素,所以还要继续向前移动元素,而且假设在fast和slow都向前走之后才执行nums[slow]=nums[fast],假如此时fast++后,超出了数组的范围,则fast的值就是不合理的下标值,此时会报错提示越界,所以要在slow++和fast++之前执行nums[slow]=nums[fast]。原创 2024-04-26 11:27:41 · 779 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode367有效的完全平方数
要简单一些,那个还要处理开平方不是整数的情况,这个直接就按左闭右闭,middle的平方是num就返回true,否则继续迭代二分直到找到middle的平方是num的情况返回true,或者找不到跳出循环返回false.这个题就用二分查找的思想,比。原创 2024-04-23 09:46:20 · 332 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode69x的平方根
求解平方根,但是返回的是整数,则用二分法,如果是真的求解一个平方根的近似值,可以采用零点定理和牛顿迭代法,那种是可以求出小数值的。原创 2024-04-22 19:39:03 · 663 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode34在排序数组中查找元素的第一个和最后一个位置
/找右边界//左闭右闭//除2相当于右移1位,节省时间else//写rightBorder = left - 1也行//找左边界//左闭右闭//除2相当于右移1位,节省时间//target在左区间else// 写leftBorder = right + 1也行。原创 2024-04-21 19:11:29 · 1082 阅读 · 0 评论 -
【代码随想录刷题记录】LeetCode35搜索插入位置
我演示的是找不到的情况,其实就是while循环跳出后应该处理的相关的逻辑,第一个是left>right,第二个其实就到left==right就跳出循环了,所以这两种情况对应的就是找不到的情况,最后画一下图就明白了。原创 2024-04-17 13:13:16 · 973 阅读 · 1 评论 -
【代码随想录刷题记录】LeetCode704二分查找
读研以后写AI那些玩意写多了,确实需要练练算法,我现在写个二分查找都出现问题,绷不住了,而且过CSP竞赛是毕业条件,没办法,以后一天刷一个题吧,太忙了。原创 2024-04-17 10:56:24 · 278 阅读 · 0 评论