最近比较闲,也比较焦虑,刷刷题吧

目录

  • 11. 盛最多水的容器
  • 22. 括号生成
  • 31. 下一个排列
  • 48. 旋转图像
  • 49. 字母异位词分组
  • 56. 合并区间
  • 75. 颜色分类
  • 79. 单词搜索
  • 114. 二叉树展开为链表
  • 141. 环形链表
  • 148. 排序链表
  • 152. 乘积最大子数组
  • 169. 多数元素
  • 207. 课程表(有向图排序问题)
  • 215. 数组中的第K个最大元素
  • 208. 实现 Trie (前缀树)
  • 221. 最大正方形
  • 234. 回文链表
  • 238. 除自身以外数组的乘积
  • 240. 搜索二维矩阵 II
  • 283. 移动零
  • 394. 字符串解码
  • 399. 除法求值
  • 406. 根据身高重建队列
  • 437. 路径总和 III
  • 448. 找到所有数组中消失的数字
  • 543. 二叉树的直径
  • 560. 和为K的子数组

11. 盛最多水的容器

这个解释挺好的
O(n) 双指针解法:理解正确性、图解原理(C++/Java)

两次遍历。

class Solution {public:int getlen(ListNode* head){int res = 0;ListNode* cur = head;while(cur != nullptr){cur = cur->next;res++;}return res;}ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy_head = new ListNode(0);dummy_head->next = head;ListNode* cur = dummy_head;int len = getlen(head);int N = len - n;for(int i = 0; i < N; i++){cur = cur->next;}ListNode* tmp = cur->next;cur->next = cur->next->next;delete(tmp);ListNode* ret = dummy_head->next;delete dummy_head;return ret;}
};

前后指针法。

class Solution {public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode* dummy_head = new ListNode(0,head);ListNode* first = dummy_head;ListNode* second = head;//second先行n个节点for(int i = 1; i <= n ;i++){second = second->next;}//两个节点同时移动while(second){second = second->next;first = first->next;}//此时second处于链表尾部后面的空节点,first处于待删除节点的前驱ListNode* tmp = first->next;first->next = first->next->next;delete(tmp);ListNode* ret = dummy_head->next;delete dummy_head;return ret;}
};

22. 括号生成

产生左分支时候,只看当前是否还有左括号可以使用。
产生右分支时候,还要受到左分支的限制。右边剩余可以使用的括号数量一定得严格大于左边剩余的数量时,才可以产生分支
典型回溯。

class Solution {private:vector<string> result;string path;
public:void trackback(int left,int right,string path){if(left == 0 && right == 0){result.emplace_back(path);}//剪枝if(left > right) return;//向左if(left > 0){left--;trackback(left,right,path+'(');left++;}//向右if(right > 0){right--;trackback(left,right,path+')');right++;}}vector<string> generateParenthesis(int n) {result.clear();path.clear();path = "";trackback(n,n,path);return result;}
};

31. 下一个排列

不熟悉,还得多理解理解。

class Solution {public:void nextPermutation(vector<int>& nums) {int n = nums.size();if(n <= 1) return;int i = n-2;while(i >= 0 && nums[i] >= nums[i+1]){i--;}if(i < 0){reverse(nums.begin(),nums.end());return;}int j = n-1;while(j >= 0 && nums[i] >= nums[j]) j--;swap(nums[i],nums[j]);reverse(nums.begin()+i+1,nums.end());}
};

48. 旋转图像

草图需要画4x4的,不然具体swap的时候会搞乱掉。。。

class Solution {public:void rotate(vector<vector<int>>& matrix) {int pos1 = 0;int pos2 = matrix.size()-1;while(pos1 < pos2){int add = 0;while(add < pos2 - pos1){int tmp = matrix[pos1][pos1+add];matrix[pos1][pos1+add] = matrix[pos2-add][pos1];matrix[pos2-add][pos1] = matrix[pos2][pos2-add];matrix[pos2][pos2-add] = matrix[pos1+add][pos2];matrix[pos1+add][pos2] = tmp;add++;}pos1++;pos2--;}}
};

49. 字母异位词分组

关键是hash表的结构。key是排序后的string,value是str数组,存放同一个key的元素。

class Solution {public:vector<vector<string>> groupAnagrams(vector<string>& strs) {unordered_map<string,vector<string>> umap;for(auto str : strs){string key = str;sort(key.begin(),key.end());umap[key].emplace_back(str);}vector<vector<string>> result;for(auto it = umap.begin(); it != umap.end(); it++){result.emplace_back(it->second);}return result;}
};

56. 合并区间

感觉下面的这个自己的写法还是有点繁琐。。。
可以看我的每一步融合后对原数组的影响。

class Solution {public:int his[10001];vector<vector<int>> merge(vector<vector<int>>& intervals) {if(intervals.size() == 1) return intervals;sort(intervals.begin(),intervals.end());int i = 1;vector<vector<int>> res;res.emplace_back(intervals[0]);while(i < intervals.size()){//如果前面一个区间与当前区间不重合,将此区间加入结果if(intervals[i-1][1] < intervals[i][0]){res.emplace_back(intervals[i]);}//如果前面一个和当前的重叠了,融合else if(intervals[i-1][1] >= intervals[i][0]){//融合的区间取两个区间的左右边界intervals[i][0] = min(intervals[i-1][0],intervals[i][0]);intervals[i][1] = max(intervals[i-1][1],intervals[i][1]); //然后把前面一个区间值也变为融合后的区间,具体区间长什么样可以看打印信息intervals[i-1] = intervals[i];//如果结果集最新添加的元素区间与当前区间有重合(此时可以保证改最新区间为当前区间的子区间,所以直接替换即可)if(res.back()[1] >= intervals[i][0]){res.pop_back();res.emplace_back(intervals[i]);}else res.emplace_back(intervals[i]);}//cout <<"[" << intervals[i][0]<<","<<intervals[i][1] << "]" <<endl;i++;}return res;}
};

这边贴一下甜姨的解法,以及她整理的相关题目,留着以后再刷:

《LeetcodeHot100非困难题补录》相关推荐

  1. ComeFuture英伽学院——2020年 全国大学生英语竞赛【C类初赛真题解析】(持续更新)

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  2. ComeFuture英伽学院——2019年 全国大学生英语竞赛【C类初赛真题解析】大小作文——详细解析

    视频:ComeFuture英伽学院--2019年 全国大学生英语竞赛[C类初赛真题解析]大小作文--详细解析 课件:[课件]2019年大学生英语竞赛C类初赛.pdf 视频:2020年全国大学生英语竞赛 ...

  3. 信息学奥赛真题解析(玩具谜题)

    玩具谜题(2016年信息学奥赛提高组真题) 题目描述 小南有一套可爱的玩具小人, 它们各有不同的职业.有一天, 这些玩具小人把小南的眼镜藏了起来.小南发现玩具小人们围成了一个圈,它们有的面朝圈内,有的 ...

  4. 信息学奥赛之初赛 第1轮 讲解(01-08课)

    信息学奥赛之初赛讲解 01 计算机概述 系统基本结构 信息学奥赛之初赛讲解 01 计算机概述 系统基本结构_哔哩哔哩_bilibili 信息学奥赛之初赛讲解 02 软件系统 计算机语言 进制转换 信息 ...

  5. 信息学奥赛一本通习题答案(五)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  6. 信息学奥赛一本通习题答案(三)

    最近在给小学生做C++的入门培训,用的教程是信息学奥赛一本通,刷题网址 http://ybt.ssoier.cn:8088/index.php 现将部分习题的答案放在博客上,希望能给其他有需要的人带来 ...

  7. 信息学奥赛一本通 提高篇 第六部分 数学基础 相关的真题

    第1章   快速幂 1875:[13NOIP提高组]转圈游戏 信息学奥赛一本通(C++版)在线评测系统 第2 章  素数 第 3 章  约数 第 4 章  同余问题 第 5 章  矩阵乘法 第 6 章 ...

  8. 信息学奥赛一本通题目代码(非题库)

    为了完善自己学c++,很多人都去读相关文献,就比如<信息学奥赛一本通>,可又对题目无从下手,从今天开始,我将把书上的题目一 一的解析下来,可以做参考,如果有错,可以告诉我,将在下次解析里重 ...

  9. 信息学奥赛一本通(C++版) 刷题 记录

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 刷题 记录 http://ybt.ssoier. ...

  10. 最近公共祖先三种算法详解 + 模板题 建议新手收藏 例题: 信息学奥赛一本通 祖孙询问 距离

    首先什么是最近公共祖先?? 如图:红色节点的祖先为红色的1, 2, 3. 绿色节点的祖先为绿色的1, 2, 3, 4. 他们的最近公共祖先即他们最先相交的地方,如在上图中黄色的点就是他们的最近公共祖先 ...

最新文章

  1. 如何解决notefirst的闪退问题?
  2. mysql8.0日期类型_MySQL8.0中的日期类数据及其函数
  3. 5. SQL Server数据库性能监控 - 当前请求
  4. mysql chartset utf 8_[数据库]MySQL chartset_星空网
  5. 实力打脸: 量子隐形传输与 “瞬间移动” 毫无关系
  6. 各种对话框 Dialog
  7. HDU-4578 Transformation 线段树(两种方法)
  8. java DTO循环_Java Stream与for循环比较
  9. 小明放学201812-2
  10. 匹夫细说C#:从园友留言到动手实现C#虚函数机制
  11. docker查看mysql日志_如何查看docker运行日志
  12. 北京药监局考试计算机操作,考科一电脑操作
  13. javascript-异步之Promise then和catch
  14. ttys和tty_Linux中tty、pty、/dev/ttySn等概念讲解
  15. 编译原理——实现NFA到DFA 的转换(子集构造法)
  16. c语言中方阵对角线的和程序,c语言程序 1、方阵求出主对角线上元素之和;2、辅对角线上元素之积;3方阵中最大的元素...
  17. java 护眼背景,设置Eclipse配色方案--设置不同背景色,有效护眼
  18. 模态对话框和非模态对话框的区别
  19. 如何修改数据表中的信息
  20. 不要跟穷鬼学着做副业

热门文章

  1. 我的世界中国版服务器地图文件在哪,我的世界中国版手机版联机的地图保存在哪 | 手游网游页游攻略大全...
  2. extjs弹出窗口查看文本内容-new Ext.Window
  3. opencv检测相交点_OpenCV特征点检测------ORB特征
  4. 华为硬件工程师社招机考题库_干货:2016年华为中兴硬件工程师笔试题目与经验...
  5. js操作json方法总结
  6. 深入解析jQuery中的延时对象的概念
  7. echarts地图在ie浏览器上不显示
  8. java中值传递和引用传递
  9. spoj1026 favorite dice
  10. awk----基本用法