GuoXinxin

26. 合并区间(56)

给出一个区间的集合,请合并所有重叠的区间。

示例 1:

输入: [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].
示例 2:

输入: [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。

解题思路:

 

 

 

27. 不同路径(62)

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。

问总共有多少条不同的路径?

例如,上图是一个7 x 3 的网格。有多少可能的路径?

说明:m 和 的值均不超过 100。

示例 1:

输入: m = 3, n = 2
输出: 3
解释:
从左上角开始,总共有 3 条路径可以到达右下角。
1. 向右 -> 向右 -> 向下
2. 向右 -> 向下 -> 向右
3. 向下 -> 向右 -> 向右
示例 2:

输入: m = 7, n = 3
输出: 28

解题思路:  

动态规划:第一行与第一列都初始化为1,因为到达这些方格的方法只有一种。

其他方格:dp[i][j]=dp[i-1][j]+dp[i][j-1];

 1 class Solution {
 2 public:
 3     int uniquePaths(int m, int n) {
 4         
 5         if(m<2 || n<2)
 6             return 1;
 7         
 8         vector<vector<int>> dp(m,vector<int>(n,1));
 9         for(int i=1;i<m;i++)
10             for(int j=1;j<n;j++)
11                 dp[i][j]=dp[i-1][j]+dp[i][j-1];
12         
13         return dp[m-1][n-1];
14     }
15 };
View Code

 

28. 最小路径和(64)

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

说明:每次只能向下或者向右移动一步。

示例:

输入:
[
  [1,3,1],
  [1,5,1],
  [4,2,1]
]
输出: 7
解释: 因为路径 1→3→1→1→1 的总和最小。

解题思路:  

 动态规划:第一行第一列对前面的元素累加

其他方格:dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j]

 1 class Solution {
 2 public:
 3     int minPathSum(vector<vector<int>>& grid) {
 4         int szx = grid.size();
 5         if(szx<1)
 6             return 0;
 7         int szy = grid[0].size();
 8         int dp[szx][szy];
 9         
10         dp[0][0]=grid[0][0];
11         for(int i=1;i<szx;i++){
12             dp[i][0]= grid[i][0] + dp[i-1][0];
13         }
14         
15         for(int i=1;i<szy;i++){
16             dp[0][i]= grid[0][i] + dp[0][i-1];       
17         }
18         
19          for(int i=1;i<szx;i++)
20              for(int j=1;j<szy;j++)
21                  dp[i][j]=min(dp[i-1][j],dp[i][j-1])+grid[i][j];
22         
23         return dp[szx-1][szy-1];
24     }
25 };
View Code

 

29. 爬楼梯(70)

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。

每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?

注意:给定 n 是一个正整数。

示例 1:

输入: 2
输出: 2
解释: 有两种方法可以爬到楼顶。
1.  1 阶 + 1 阶
2.  2 阶
示例 2:

输入: 3
输出: 3
解释: 有三种方法可以爬到楼顶。
1.  1 阶 + 1 阶 + 1 阶
2.  1 阶 + 2 阶
3.  2 阶 + 1 阶

解题思路:  

 动态规划:f(n) = f(n-1) + f(n-2)

初始值:f1=1, f2=2

 1 //f(n) = f(n-1) + f(n-2)
 2 
 3 class Solution {
 4 public:
 5     int climbStairs(int n) {
 6         if(n<3)
 7             return n;
 8         int first = 1, second =2;
 9         int res; 
10         for(int i=3;i<=n;i++){
11             res = first + second;
12             first = second;
13             second = res;
14         }
15         
16         return res;
17     }
18 };
View Code

 

30. 编辑距离(72)

给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 。

你可以对一个单词进行如下三种操作:

  1. 插入一个字符
  2. 删除一个字符
  3. 替换一个字符
示例 1:

输入: word1 = "horse", word2 = "ros"
输出: 3
解释: 
horse -> rorse (将 \'h\' 替换为 \'r\')
rorse -> rose (删除 \'r\')
rose -> ros (删除 \'e\')
示例 2:

输入: word1 = "intention", word2 = "execution"
输出: 5
解释: 
intention -> inention (删除 \'t\')
inention -> enention (将 \'i\' 替换为 \'e\')
enention -> exention (将 \'n\' 替换为 \'x\')
exention -> exection (将 \'n\' 替换为 \'c\')
exection -> execution (插入 \'u\')

解题思路:  

 

 

31. 颜色分类(75)

给定一个包含红色、白色和蓝色,一共 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。

此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。

注意:
不能使用代码库中的排序函数来解决这道题。

示例:

输入: [2,0,2,1,1,0]
输出: [0,0,1,1,2,2]

进阶:

    • 一个直观的解决方案是使用计数排序的两趟扫描算法。
      首先,迭代计算出0、1 和 2 元素的个数,然后按照0、1、2的排序,重写当前数组。
    • 你能想出一个仅使用常数空间的一趟扫描算法吗?

解题思路:

 

 

32. 最小覆盖子串(76)

 给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串。

示例:

输入: S = "ADOBECODEBANC", T = "ABC"
输出: "BANC"

说明:

  • 如果 S 中不存这样的子串,则返回空字符串 ""
  • 如果 S 中存在这样的子串,我们保证它是唯一的答案。

解题思路:  

 

 

33. 子集(78)

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。

说明:解集不能包含重复的子集。

示例:

输入: nums = [1,2,3]
输出:
[
  [3],
  [1],
  [2],
  [1,2,3],
  [1,3],
  [2,3],
  [1,2],
  []
]

解题思路:  

 

 

34. 单词搜索(79)

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例:

board =
[
  [\'A\',\'B\',\'C\',\'E\'],
  [\'S\',\'F\',\'C\',\'S\'],
  [\'A\',\'D\',\'E\',\'E\']
]

给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

解题思路:  

 

 

35. 柱状图中最大的矩形(84)

给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。

求在该柱状图中,能够勾勒出来的矩形的最大面积。

以上是柱状图的示例,其中每个柱子的宽度为 1,给定的高度为 [2,1,5,6,2,3]

图中阴影部分为所能勾勒出的最大矩形面积,其面积为 10 个单位。

示例:

输入: [2,1,5,6,2,3]
输出: 10

解题思路:  

 

 

 

36. 最大矩形(85)

 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

示例:

输入:
[
  ["1","0","1","0","0"],
  ["1","0","1","1","1"],
  ["1","1","1","1","1"],
  ["1","0","0","1","0"]
]
输出: 6

解题思路:  

 

 

37. 二叉树的中序遍历(94)

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-29
  • 2021-09-04
  • 2022-12-23
  • 2021-07-05
  • 2021-12-12
  • 2022-12-23
猜你喜欢
  • 2021-12-09
  • 2021-04-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-26
相关资源
相似解决方案