目录

  • 在排序数组中查找元素的第一个和最后一个位置
  • 组合总和
  • 全排列
  • 旋转图像
  • 字母异位词分组
  • 跳跃游戏
  • 合并区间

在排序数组中查找元素的第一个和最后一个位置


分析:
  二分查找:一旦查找到target,就从该位置开始向两边扩张,找到边界。
代码:

class Solution {public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.size() == 0) {return {-1, -1};}if(nums.size() == 1 && nums[0] == target) {return {0, 0};}int n = nums.size();int l = 0, r = n - 1;while(l <= r) {int mid = l + (r - l) / 2;if(nums[mid] == target) {int i = mid, j = mid;while(i >= 0 && nums[i] == target) {i--;}while(j < n && nums[j] == target) {j++;}return {i + 1, j - 1};}else if(nums[mid] > target) {r = mid - 1;}else {l = mid + 1;}}return {-1, -1};}
};

组合总和


分析:
  dfs+回溯:每次可以选择跳过当前位置,也可以重复选择当前位置。
代码:

class Solution {public:void dfs(vector<int>& candidates, int target, vector<vector<int>>& res, vector<int>& cur, int ind) {if(ind == candidates.size()) {return;}if(target == 0) {res.push_back(cur);return;}dfs(candidates, target, res, cur, ind + 1);if(target - candidates[ind] >= 0) {cur.push_back(candidates[ind]);target -= candidates[ind];dfs(candidates, target, res, cur, ind);target += candidates[ind];cur.pop_back();}}vector<vector<int>> combinationSum(vector<int>& candidates, int target) {vector<vector<int>> res;vector<int> cur;dfs(candidates, target, res, cur, 0);return res;}
};

全排列

全排列

旋转图像


分析:
  原数组中的(row, col)旋转后,在新数组中的位置为(col, n - row - 1)。
代码:

class Solution {public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size();vector<vector<int>> temp(n, vector<int>(n));for(int row = 0; row < n; row++) {for(int col = 0; col < n; col++) {temp[col][n - row - 1] = matrix[row][col];}}for(int row = 0; row < n; row++) {for(int col = 0; col < n; col++) {matrix[row][col] = temp[row][col];}}}
};

字母异位词分组


分析:
  对原字符串数组中的每一个字符串进行排序,如果两个字符串是字母异位词,则排序后二者相同。基于这种性质,可以使用哈希表进行存储。
代码:

class Solution {public:vector<vector<string>> groupAnagrams(vector<string>& strs) {vector<vector<string>> res;if(strs.size() == 0) {res.push_back({});res[0].push_back("");return res;}//排序+哈希表unordered_map<string, vector<string>> mp;vector<string> temp;for(int i = 0; i < strs.size(); i++) {if(strs[i] == "") {mp[""].push_back("");continue;}string s = strs[i];sort(s.begin(), s.end());mp[s].push_back(strs[i]);}unordered_map<string, vector<string>>::iterator it = mp.begin();for(; it != mp.end(); ++it) {res.push_back(it->second);}return res;}
};

跳跃游戏


分析:
  贪心算法:

代码:

class Solution {public:bool canJump(vector<int>& nums) {int n = nums.size();int rightmost = 0;for(int i = 0; i < n; i++) {if(i <= rightmost) {rightmost = max(rightmost, i + nums[i]);if(rightmost >= n - 1) {return true;}}}return false;}
};

合并区间


分析:
  将原数组按照左边界升序的原则进行排序,排序后可合并的区间一定是连续的。令结果数组为res,遍历排序后的数组,如果当前res为空,那么应该将当前区间加入;如果res中最后一个区间的右边界小于当前区间的左边界,那么当前区间显然是不能和res中最后一个区间合并的,单独加入;否则就能合并,由于是按照左边界升序排列,所以只需要将res中最后一个区间的右边界进行更新即可。
代码:

class Solution {public:vector<vector<int>> merge(vector<vector<int>>& intervals) {vector<vector<int>> res;sort(intervals.begin(), intervals.end());int n = intervals.size();for(int i = 0; i < n; i++) {if(res.size() == 0 || res.back()[1] < intervals[i][0]) {res.push_back(intervals[i]);}else {res.back()[1] = max(res.back()[1], intervals[i][1]);}}return res;}
};

LeetCode HOT 100 --- 2021/7/30相关推荐

  1. 2021/10/30的1+X大数据Java答案

    2021/10/30 步骤二 public Member() { }public Member(String name,String pwd,float score,int rank) {this.n ...

  2. LeetCode Top 100 Liked 点赞最高的 100 道算法题

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:刷题顺序,刷题路径,好题,top100,怎么刷题,Leet ...

  3. 【LeetCode】剑指 Offer 30. 包含min函数的栈

    [LeetCode]剑指 Offer 30. 包含min函数的栈 文章目录 [LeetCode]剑指 Offer 30. 包含min函数的栈 一.辅助栈 一.辅助栈 解题思路: 普通栈的 push() ...

  4. Leetcode刷题 2021.01.22

    Leetcode刷题 2021.01.22 Leetcode1042 不邻接植花 Leetcode1010 总持续时间可被 60 整除的歌曲 Leetcode1091 二进制矩阵中的最短路径 Leet ...

  5. 2021数学基础30讲扫描版 网盘(里面直接是文档,免费)

    2021数学基础30讲扫描版 网盘(里面直接是文档,无需付费) 考研数学基础(数一二三通用) https://pan.baidu.com/s/1tq_GzdapBpiPxjtu7entEw 提取码:s ...

  6. 2021.1.30课程摘要(逻辑教育-王劲胜)

    2021.1.30课程摘要 逻辑教育-13期-Python基础班-王劲胜 一.集合 二.函数(上) 三.作业讲解 逻辑教育-13期-Python基础班-王劲胜 一.集合 1.集合简介 • 集合表现形式 ...

  7. Unable to negotiate with 100.9.70.30 port 29418: no matching key exchange method found

    1.问题 在Linux上 clone Gerrit 代码时报错:Unable to negotiate with 100.9.70.30 port 29418: no matching key exc ...

  8. 2021.03.30【2021省赛】模拟 比赛总结

    2021.03.30[2021省赛]模拟 比赛总结 地址: https://gmoj.net/senior/#contest/home/3350 T1: 神奇纸牌(uno) T2: 凌乱平衡树 (tr ...

  9. LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium)

    welcome to my blog LeetCode Top 100 Liked Questions 221. Maximal Square (Java版; Medium) 题目描述 Given a ...

最新文章

  1. 解决firefox ubuntu无法打开页面的问题
  2. DeepChem | Windows 10下anaconda3环境从源码构建并安装deepchem
  3. ANCOM:找出微生物群落中的差异物种
  4. Bootstrap4 glyphicon 移除图标 glyphicon fonts-faces 解决方案
  5. 简约之美Jodd-http--应用一箩筐
  6. 如何利用LabelImg将标注文件在YOLO格式与PascalVOC格式间相互转换
  7. 基于MaxCompute打造轻盈的人人车移动端数据平台
  8. Spring Setter依赖注入示例
  9. 解决Ubuntu下pycharm无法输入中文的问题
  10. 设计师专用新年春节2021牛年艺术字体,提升设计效率!
  11. 使用webclient上传下载实例
  12. 国家统计局统计用区划代码和城乡划分代码---爬虫、详细分析
  13. 手把手教你实现——Python文字(汉字)转语音教程,举一反三~
  14. 主板检测卡c5_主板检测卡代码(常见)及解决方法
  15. 手机android系统安装,如何重新安装Android手机系统
  16. 打开本地html加载网页慢,电脑检查网速正常但打开网页慢如何解决
  17. matlab——红绿灯颜色及数字识别(三)
  18. 北理计算机学院高扬,李爽_北京理工大学计算机学院
  19. 用PDFPrint进行PDF文件的批量打印
  20. 从微信办公看信息泄露

热门文章

  1. 用户运营:5步学会用户留存数据分析
  2. python淘宝爬虫登陆功能和下单功能_Python 爬虫实战5 模拟登录淘宝并获取所有订单...
  3. 六年级上册计算机知识点总结,六年级数学上册知识点的整理
  4. 使用Flash制作IeBook中页面跳转的按钮
  5. Unity 3D游戏九:粒子光环
  6. 前淘宝技术专家谈12306:这个网站很神奇
  7. 你真的知道flex: 1;是什么意思吗?
  8. 黑苹果系统更换SSD的方法
  9. 全国计算机等级AJIL,全国计算机二级VB知识点2015第一次课
  10. C#读写二进制存档文件,可以修改部分单机游戏存档