Leetcode刷题笔记
Jusufin
这个作者很懒,什么都没留下…
展开
-
Leetcode刷题笔记_二分变式
剑指 Offer 11. 旋转数组的最小数字 - 力扣(LeetCode) (leetcode-cn.com)题目意思是一个单调不减的数组,往右平移n次,得到一个新数组,在新数组中查找最小元素。核心思想:(1)假设严格单增,即没有重复数字,只需比较mid与r即可,如代码注释所示(2)假设不严格单调,如题目所示,需要额外考虑 nums[mid] == nums[r]的情况,如果二者相等,不妨这样想,r位置处可以不再考虑了,毕竟有了mid处相等的副本,所以r--。int minAr原创 2022-01-19 16:41:28 · 306 阅读 · 0 评论 -
Leetcode刷题笔记_二维dp节省空间开销
剑指 Offer 47. 礼物的最大价值 - 力扣(LeetCode) (leetcode-cn.com)下述方法是建立一个二维数组,二维数组每个位置表示走到该位置时候的礼物最大价值。 int maxValue(vector<vector<int>>& grid) { int line = grid.size(); int col = grid[0].size(); vector&.原创 2022-01-19 11:38:00 · 226 阅读 · 0 评论 -
Leetcode刷题笔记_二分查找二维矩数组
剑指 Offer 04. 二维数组中的查找 - 力扣(LeetCode) (leetcode-cn.com)//矩阵每列从上到下递增,每行从左往右也递增bool findNumberIn2DArray(vector<vector<int>>& matrix, int target) { int line = matrix.size() - 1; int col = 0; //注意数组为空的情况 if(line < 0 || ma原创 2022-01-19 10:27:15 · 538 阅读 · 0 评论 -
Leetcode刷题笔记_树的层序遍历
面试题32 - I. 从上到下打印二叉树 - 力扣(LeetCode) (leetcode-cn.com)vector<int> levelOrder(TreeNode* root) { vector<int> ans; if(!root) return ans; //空节点的话,返回空 queue<TreeNode*> qu; //建立一个队列保存树的节点 qu.push(root);原创 2022-01-18 14:41:25 · 142 阅读 · 0 评论 -
Leetcode刷题笔记_求二维矩阵某个元素所在行列的最大值
①先遍历每行的最大值O(n2),再遍历每列的最大值O(n2),再取二者最大值O(n2)②在一个二层for循环中做到上述三点。class Solution {public: int maxIncreaseKeepingSkyline(vector<vector<int>>& grid) { int n = grid.size(); vector<int> rowMax(n); /...原创 2021-12-13 09:53:50 · 203 阅读 · 0 评论 -
Leetcode刷题笔记_滑动窗口
438. 找到字符串中所有字母异位词 - 力扣(LeetCode) (leetcode-cn.com)vector<int> findAnagrams(string s, string p) { int len1 = s.size(); int len2 = p.size(); vector<int> map1(26,0); //记录滑动窗口中各个字母出现次数 vector<int> map2(26,0); vector原创 2021-11-28 13:29:59 · 53 阅读 · 0 评论 -
Leetcode刷题笔记_519_随机翻转矩阵
519. 随机翻转矩阵 - 力扣(LeetCode) (leetcode-cn.com)vector<int> flip() { int pos = rand() % sum; sum--; vector<int> vi; if(myMap.count(pos)){ vi.push_back(myMap[pos]/n); vi.push_back(myMap[pos]%n); }else{ .原创 2021-11-27 16:49:39 · 68 阅读 · 0 评论 -
Leetcode刷题笔记_Fisher-Yates 洗牌算法
返回一个数组的等概率乱序:从第一个元素开始,依次把它和后面等概率选区的某个元素交换位置。vector<int> shuffle() { int len = nums.size(); for(int i=0;i<len;i++){ int j = i + rand()%(len-i); swap(nums[i],nums[j]); } return nums;}时间复杂度O(n)空间O(1)...原创 2021-11-27 15:18:17 · 62 阅读 · 0 评论 -
Leetcode刷题笔记_11.18_树的六种遍历方式
脑海或草稿纸上先画出一个二叉树的图,以便于理解。1、递归实现树的前序遍历void PreOrder(TreeNode* root){ if(root!=NULL){ visit(root); //视情况做相关操作 PreOrder(root->left); PreOrder(root->right); }}2、递归实现树的中序遍历void MidOrde原创 2021-11-18 17:29:38 · 119 阅读 · 0 评论 -
Leetcode刷题笔记_11.17
题目:leetcode 318关键在于如何判断两个字符串是否具有相同的字母,若逐个对比显然复杂度O(n2)。这里讨论利用位运算以复杂度O(1)解决该问题。字母只有26个,可以创建一个int,以低26位标识某字母是否出现过,核心代码如下:...原创 2021-11-17 16:28:17 · 103 阅读 · 0 评论