算法笔记
文章平均质量分 91
代码随想录训练营!跟着Carl老师学习算法
Elvis_Max
这个作者很懒,什么都没留下…
展开
-
算法学习|Day39 动态规划part02|Leetcode 62.不同路径;63.不同路径II
在动态规划问题中,可以采用滚动数组的优化方式于解决动态规划中的空间问题。遍历总是从数组初始化的下一行,下一列开始的,所以i,j一般都是1开始此题跟62.不同路径相似,但也有很多细节,比如初始化的部分,很容易忽略了障碍之后应该都是0的情况。原创 2023-07-01 19:42:34 · 503 阅读 · 0 评论 -
算法学习|Day38 动态规划|Leetcode 509. 斐波那契数、70. 爬楼梯 、746. 使用最小花费爬楼梯
此题类似斐波那契数遍历初始位置跟if语句中的n小于的那个数相匹配。原创 2023-06-30 21:56:23 · 127 阅读 · 0 评论 -
算法学习|Day31 贪心算法|Leetcode 455. 分发饼干 376. 摆动序列 53. 最大子数组和
最大和maxSum初始值设为,是为了保证计算出的子序和curSum一定大于等于maxSum所设置的值,从而保证得到正确的结果。考虑一下,如果maxSum的初始值为0,而数组中所有的元素都是负数,那么遍历数组后maxSum的值仍然为0,结果就不正确了。如果将maxSum的初始值设为负无穷,或者比数组中所有元素的最小值还小一些的值,可以保证curSum在遍历过程中取到正数时,可以正确地更新maxSum。要注意起始位置和终止位置如何确定。原创 2023-06-29 21:58:53 · 184 阅读 · 0 评论 -
算法学习|Day8 字符串|Leetcode 344反转字符串 541反转字符串II 剑指offer05.替换空格 151反转字符串里的单词
是 Java 中的一个类,用于表示可变的字符串。它可以对字符串进行添加、删除、修改等操作,而不产生新的字符串对象,因此不会带来额外的开销。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。在 Java 语言中,字符串都被设计成==「不可变」==的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。因为字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。反转链表中,用了双指针方法,所以,反转字符串仍然是用。原创 2023-06-05 10:26:58 · 42 阅读 · 0 评论 -
算法学习|Day10 栈part01|Leetcode 232 用栈实现队列 225 用队列实现栈
pop() 和 peek()两个函数功能类似,可以单独把他们共用的部分抽象出来构造一个新的函数,比如此题中新创建的dumpStackIn()函数。本题不涉及什么高深的算法知识,就是用两个栈模拟队列的行为;原创 2023-06-02 18:15:39 · 59 阅读 · 0 评论 -
算法学习|Day7 哈希表part02|Leetcode 454. 四数相加II 383.赎金信 15.三数之和(双指针) 18.四数之和
提出疑问,为什么不只遍历A,得到Map,然后再遍历B,C,D中所有组合的可能性?因为这样的话,时间复杂度和空间复杂度就提升为O(N^3);注意res计数器在加的时候,并不是直觉上的res+= 1因为出现的频率不一定是1,比如说map中储存的是5:3,对应三组AB元组,分别是,A[1] +B[2] = 5,A[2] +B[3] = 5,A[3] +B[4] = 5,然后在C+D中找到了一对相加等于-5的,所以说这样就找到了三组四元组,应该res+3;原创 2023-05-30 23:03:47 · 155 阅读 · 1 评论 -
算法学习|Day4链表收尾|Leetcode 24.两两交换链表节点 19.删除链表的倒数第N个节点 142.环形链表 II M
给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。原创 2023-05-28 21:43:01 · 167 阅读 · 0 评论 -
算法学习|Day5哈希表开启|Leetcode 242.有效的字母异位词 349.两个数组的交集 202.快乐数 1.两数之和
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!在哈希值比较小,范围可控情况下用数组;数组很大用set;k对应有value的话用map学会用字符下标来映射为数组下标这是本题要学会的集合求交集可以用set集合来去重map集合中key可以存的是数组元素,这样可以更快查找元素是否出现过。原创 2023-05-30 00:07:31 · 257 阅读 · 0 评论 -
算法学习|day3 链表 Leetcode 203.移出链表元素 707.设计链表 206.反转链表
在不使用虚拟头节点进行删除头节点要用while 不能用if删除值相同的头结点后,可能新的头结点也值相等,用循环解决虚拟头节点删除最后返回的是为什么要使用临时指针?操作完链表之后要返回头结点,直接操作头结点会改变其值,故需要定义一个临时指针指向头结点获取第index节点值注意index非法因为index是从0开始的,最后一个位置是size-1;所以最大值index>=size就已经非法了return - 1;addAtIndex(index,val添加节点)第index前size++要注意。原创 2023-05-27 14:45:43 · 169 阅读 · 1 评论 -
算法学习| Day2数组收尾 Leetcode 977.有序数组的平方 209.长度最小的子数组 59螺旋矩阵II
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。至此,数组部分已经完结,但是对应数组部分的方法仍需要进一步练题深化,目前来说学会了二分查找,双指针法,滑动窗口,模拟法,后续仍需要多加练习!如果只用一个for循环来表示 滑动窗口的起始位置,那么如何遍历剩下的终止位置?不要以为for里放一个while就以为是O(n^2), 主要是看每一个元素被操作的次数,本题关键还是在转圈的逻辑,在二分搜索中提到的区间定义,在这里又用上了。原创 2023-05-25 17:52:25 · 150 阅读 · 1 评论 -
算法学习| Day1数组 Leetcode 704.二分查找 27.移除元素
相向,顾名思义就是从两头开始向中间靠拢,一头一尾定义2个左右指针,因为此题只是要求移出元素后返回新数组的长度,并没有对其中数组内部元素的序列有要求,所以正是因为这一点,本题采用此方法,让右指针先移动到从右数第一个值不为val的位置,之后开始while循环,一个长度为5的数字,最后一个数下标为4,length=5,若**要数组下标在左闭右开区间[left,right)中,则right必须为5,才能使得区间在0。当i为2时,找到了符合要移出的数值,将后面的数往前移动之后是{0,1,2,3,0,4,2},原创 2023-05-24 16:31:56 · 300 阅读 · 1 评论 -
力扣算法之哈希表
当我们遇到了要快速判断一个元素是否出现集合里的时候,就要考虑哈希法。但是哈希法也是牺牲了空间换取了时间,因为我们要使用额外的数组,set或者是map来存放数据,才能实现快速的查找。如果在做面试题目的时候遇到需要判断一个元素是否出现过的场景也应该第一时间想到哈希法!原创 2023-05-02 19:15:16 · 329 阅读 · 3 评论