leetcode
S atur
要变成萤火虫~
展开
-
118. 杨辉三角 (模拟)
思路: 杨辉三角的规律就是每一行第一个最后一个元素为1,其他元素为上一行相邻元素的和,模拟一下即可。原创 2022-07-12 16:35:18 · 195 阅读 · 0 评论 -
LeetCode 566. 重塑矩阵 (m*n数组变成r*c数组&展开填充)
思路: 一维展开:理解题意即将原数组一维展开后依次填充进r*c的数组,时间复杂度O(m*n)。原创 2022-07-12 16:12:35 · 154 阅读 · 0 评论 -
LeetCode 121. 买卖股票的最佳时机(单调栈 / 遍历+最低价格买进)
思路: 1.暴力枚举:两重循环枚举两点,得到前后最大差值,但是时间复杂度,此题的数据范围显然会超时。 2. 单调栈:本题目的即求后面与当前值的最大差值,可以考虑单调队列方法得到以当前i位置往后的单调栈,在以当前prices[i]和队投元素取差得到临时差值再不断取max即可,由于此题在不断的取单调栈,因此最坏的情况下是最后只剩下最后一个数,那么其最坏复杂度为O(2n),忽略其常数情况下便是O(n)。...原创 2022-07-12 12:01:27 · 196 阅读 · 0 评论 -
LeetCode 350. 两个数组的交集 II (哈希计数 / 排序+双指针)
思路: 1. 哈希表:利用哈希表对每个数组中的元素进行统计,并取最小个数即可。2. 哈希表优化:上面的做法是进行了两次数量统计最后还要挨个push_back入答案,最坏的情况下的时间复杂度可能达到O(n+2m)或者O(2n+m)。而实际上我们可以只进行一次数量统计,在对第二个数组进行遍历时即可边遍历边push_back,时间复杂度为O(n+m), 空间复杂度O(min(n, m))。3. 排序+双指针:如若两个数组都为有序的,那么就可以直接利用双指针进行交集的获取。因此我们可以先对数组进行排序,原创 2022-07-12 10:41:35 · 172 阅读 · 0 评论 -
LeetCode 88. 合并两个有序数组 (类似归并 / 填充sort)
思路:1. 归并:由于给出的两个数组都是有序的,而需要的结果也是有序的,那么每次从两个数组取最后的一个元素对比先填充大数即可,时间复杂度O(n+m)。2. sort:nums1后面n个空间以及存在了,那么我们可以直接将nums2中的数填充进后n个位置,然后再对nums1进行sort排序一下即可,sort的时间复杂度为,故此时间复杂度为。...原创 2022-07-12 09:53:46 · 139 阅读 · 0 评论 -
LeetCode 1. 两数之和(target,暴力/哈希表)
思路: 1. 直接暴力两重循环,O()枚举查询即可。2. 利用哈希表,O(1)直接查询 target-num[i]即可,整体时间复杂度O(n)。原创 2022-07-11 11:27:57 · 109 阅读 · 0 评论 -
LeetCode53. 最大子数组和(暴力、dp、贪心、分治)
思路: 比较经典的一个题,求最大连续区间的和。1. 暴力:直接利用两重循环枚举区间的左右边界点并不断取max即可,时间复杂度O().2. dp:状态转移表达式——dp[i] = max(dp[i-1]+num[1], num[i]),dp[i]表示以num[i]为结尾的最大区间和,每次的当前节点结尾最大值肯定是上一节点最大值加上当前节点与否,时间复杂度O(n)。3. 贪心:从开头就一直选择节点,知道当前的sum...原创 2022-07-11 10:47:50 · 430 阅读 · 0 评论 -
LeetCode - 9 - (整数反转、字符串转整数atoi、二进制距离、整数转罗马数字、最接近的三数之和)
class Solution {public: int reverse(int x) { if(x>INT_MAX||x<-INT_MAX) return 0; // 可能输入的数就超出范围 if(x>-10&&x<10) return x; // 个位数不用反转直接输出 string s; int flag = 0; if(x<0){ // 负数标记一下...原创 2022-04-24 13:45:37 · 242 阅读 · 0 评论