![](https://i-blog.csdnimg.cn/direct/7fa7803bcf4b435eb6977badb13e548d.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
leetcode习题练习笔记
文章平均质量分 69
leetcode
“JB...One”
这个作者很懒,什么都没留下…
展开
-
leetcode -- 18.四数之和
使用双指针可以将四重循环的O(n^4)的时间复杂度降到。整体思路在避免出现重复四元组的情况下,找出所有四元组。两层for循环加上while循环,综合O(n^3)。原创 2024-07-29 08:00:00 · 301 阅读 · 0 评论 -
leetcode454.四数之和II
最简单易想的就是O(n^4)时间复杂度的暴力四重循环算法,本题返回一个整数表示有多少个元组符合要求,也没有任何去重的要求。本题可以分两部分,先计算nums1和nums2的和,然后在算nums3和nums4的和。将4数之和降维为两数之和,时间复杂度也会相比暴力算法大幅下。这是一个暴力四重循环算法,显然时间复杂度就是O(n^4)两个双层循环,总体时间复杂度为O(n^2)原创 2024-07-27 08:00:00 · 229 阅读 · 0 评论 -
leetcode -- 15.三数之和
第三种,元素数值过小,如果nums[i] + nums[n - 2] + nums[n - 1] < 0,那么nums[i]就太小了,需要遍历下一个更大的nums[i],continue继续遍历即可。设想nums = [-1,-1,2],那么nums[0] == nums[1],continue,是否会漏掉[-1,-1,2]这个正确答案呢。设想nums = [-1,-1,0,1,2],如果nums[0]满足要求[-1,-0,1],那么nums[1]也满足要求,故而需要去掉一个。原创 2024-07-26 08:00:00 · 1115 阅读 · 0 评论 -
leetcode热题100-动态规划(dynamic programing)-杨辉三角
在爬楼梯一题中使用一维数组即可,而本题则需要二维数组,所以这也是我为什么说dp数组的含义是第i行第j列的数组元素是什么的原因。仅靠dp[i] [j]=dp[i-1][j-1]+dp[i-1][j]这个递推公式,无法无法推出旁边的1,所。输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]]以这些1需要手动赋值,但它们是有规律的,皆是位于每一行的第一位最后一位。本题dp[i][j]的含义就是第i行第j列的元素数值是多少。第一步,确定dp[i][j]数组的含义。原创 2024-07-25 08:00:00 · 534 阅读 · 0 评论 -
leetcode热题100-技巧-只出现一次的数字
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。这也很好理解,因为0与0异或为0,0与1异或为1,所以一个数与自己。根据本题对于时间复杂度和空间复杂度的要求,异或的方法可谓是最佳的。由于除了一个数以外,其他数都成对出现,我们可以把所有数异或起。这个也很好理解,同0同1异或皆是0,最终答案也必然是0。输入:nums = [4,1,2,1,2]来,最后剩下的就是只出现一次的那个数。输入:nums = [2,2,1]输入:nums = [1]原创 2024-07-18 08:00:00 · 378 阅读 · 0 评论 -
## leetcode热题100-双指针-移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。对数组循环 – 需要一层循环 – 产生O(n)的时间复杂度。请注意 ,必须在不复制数组的情况下原地对数组进行操作。将非零元素放置在数组前面,用一个指针指向非零元素。输入: nums = [0,1,0,3,12]进阶:你能尽量减少完成的操作次数吗?输出: [1,3,12,0,0]输入: nums = [0]最后将指针后的元素全部设为0。原创 2024-07-20 08:00:00 · 245 阅读 · 0 评论 -
leetcode热题100-哈希表-最长连续序列
首先去重,从数组第一位开始循环,每一位数据都进行判断count(num-1)是否为0,如果为0,说明可以以该位数据开始连续,设置连续变量为1保存此时连续变量长度,然后在此基础上用while(count(num+1) == 1)来判断序列长度,如果进入循环,将序列长度+1。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。输入:nums = [0,3,7,2,5,8,4,6,0,1]输入:nums = [100,4,200,1,3,2]原创 2024-07-09 08:00:00 · 353 阅读 · 0 评论 -
leetcode热题100-哈希表-字词母异位分组
如果需要,sort 函数也可以接受第三个参数,这是一个自定义的比较函数或函数对象,允许你定义自己的排序逻辑。原创 2024-07-10 08:00:00 · 449 阅读 · 0 评论 -
leetcode热题100-普通数组-合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。输入:intervals = [[1,3],[2,6],[8,10],[15,18]]解释:区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].输入:intervals = [[1,4],[4,5]]输出:[[1,6],[8,10],[15,18]]输出:[[1,5]]原创 2024-07-19 08:00:00 · 562 阅读 · 0 评论 -
leetcode热题100-技巧-多数元素
给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。当数组元素个数为奇数时,由于多数元素出现次数大于 ⌊ n/2 ⌋ ,排序之后多数元素显然至少在[[n/2]+1] 处存在。当数组元素个数为偶数时,由于多数元素出现次数大于 ⌊ n/2 ⌋ ,排序之后多数元素显然至少在[[n/2]+1] 处存在。如此往复,最终被指定的多数元素就是nums中的多数元素。输入:nums = [2,2,1,1,1,2,2]输入:nums = [3,2,3]原创 2024-07-18 18:00:00 · 519 阅读 · 0 评论 -
leetcode热题100-哈希表-两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。这个双层循环的时间复杂度显然为O(n^2),我想寻找一个更快的算法。输入:nums = [2,7,11,15], target = 9。输入:nums = [3,2,4], target = 6。输入:nums = [3,3], target = 6。你可以按任意顺序返回答案。原创 2024-07-08 08:00:00 · 223 阅读 · 0 评论 -
leetcode热题100-动态规划(Dynamic Programming)-爬楼梯
还有就是dp[i - 2],上i-2层楼梯,有dp[i - 2]种方法,那么再一步跳两个台阶不就是dp[i]了么。首先是dp[i - 1],上i-1层楼梯,有dp[i - 1]种方法,那么再一步跳一个台阶不就是dp[i]了么。从递推公式dp[i] = dp[i - 1] + dp[i - 2];所以dp[i] = dp[i - 1] + dp[i - 2]。那么dp[i]就是 dp[i - 1]与dp[i - 2]之和!dp[i]: 爬到第i层楼梯,有dp[i]种方法。解释:有两种方法可以爬到楼顶。原创 2024-07-24 08:00:00 · 440 阅读 · 0 评论 -
leetcode -- 202.快乐数
对于while循环仍然是个常数级的时间复杂度,它取决于n到1的步数,但即。综上,这个判断一个数是否为快乐数的算法的时间复杂度仍然为O(1);对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。第一点,首先有一个函数能够将一个数替换为它的各位数上的平方和。如果这个过程 结果为 1,那么这个数就是快乐数。使n到不了1,进入了循环,时间复杂度仍然是常数级。算出来的数是否为1,如果为1,跳出循环,否。则判断此数是出现过,如果出现过,则说明此。数不是一个快乐数,如果没出现过则将其加入。原创 2024-07-22 08:00:00 · 397 阅读 · 0 评论 -
leetcode-383.赎金信
开辟一个vector容器,先给magazine包含的字母计数+,再给ransomNote中的字母计数-,只要vector最。如果magazine的长度原创 2024-07-17 08:00:00 · 303 阅读 · 0 评论 -
leetcode-349.两个数组的交集
find(res.begin(), res.end(), num) == res.end())本身是o(n)的时间复杂度。输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]在nums2中找到和nums1中一样的元素也需要耗费O(n)的时间复杂度。既然输出结果中的每个元素一定是唯一 的,那么可以用set将nums1去重。然后用set在nums2中找到存在于nums1中的元素,找到就存入res。输入:nums1 = [1,2,2,1], nums2 = [2,2]原创 2024-07-12 14:29:07 · 747 阅读 · 0 评论 -
leetcode-242-有效的字母异位词
public://如果s,t的长度不相等自然不可能是有效的字母异位词//开辟一个包含26个元素的数组,计数s,t中出现的字母的个数,如果每个字母出现的个数相等,则s,t是有效的字母异位词//如何计数是一个问题,char是int,用s[i] - 'a'得到的是从0 - 25的数字,从而对应数组的下标//给s中的字母+1//给t中的字母-1//如何判断最后的出现个数相等,只有Count[]数组每个元素全为0。原创 2024-07-12 09:35:01 · 1348 阅读 · 0 评论