9.25三角形最小路径和
题目:
1 | 给定一个三角形 triangle ,找出自顶向下的最小路径和。 |
示例:
1 | 输入:triangle = [[2],[3,4],[6,5,7],[4,1,8,3]] |
答案:
解法一:自上而下动态规划带备忘录:
1 | int minimumTotal(int** triangle, int triangleSize, int* triangleColSize) { |
解法二:根据奇偶划分优化存储:
1 | int minimumTotal(int** triangle, int triangleSize, int* triangleColSize) { |
9.26有效三角形个数
题目:
1 | 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 |
示例:
1 | 输入: nums = [2,2,3,4] |
答案:
解法一,排序+二分查找:
1 | int cmp(const void* a, const void* b) { |
优化后,解法二:双指针:
1 | int cmp(const void* a, const void* b) { |
9.27最大三角形面积
暴力枚举:
1 | double max(double a, double b) { |
9.28三角形的最大周长
题目:
1 | 给定由一些正数(代表长度)组成的数组 `nums` ,返回 *由其中三个长度组成的、**面积不为零**的三角形的最大周长* 。如果不能形成任何面积不为零的三角形,返回 `0`。 |
示例:
1 | 输入:nums = [2,1,2] |
答案:
简单的贪心
1 | int cmp(const void *pa, const void *pb) { |
9.29多边形三角形剖分的最低得分
题目:
1 | 你有一个凸的 `n` 边形,其每个顶点都有一个整数值。给定一个整数数组 `values` ,其中 `values[i]` 是第 `i` 个顶点的值(即 **顺时针顺序** )。 |
示例 :

1 | 输入:values = [1,2,3] |
题解:
区间dp
1 | // 记忆数组 |
9.30数组的三角和
标题:
1 | 给你一个下标从 0 开始的整数数组 nums ,其中 nums[i] 是 0 到 9 之间(两者都包含)的一个数字。 |
示例:

1 | 输入:nums = [1,2,3,4,5] |
答案:
组合数,
1 | class Solution: |
10.1换水问题
题目:
1 | 超市正在促销,你可以用 numExchange 个空水瓶从超市兑换一瓶水。最开始,你一共购入了 numBottles 瓶水。 |
示例:
1 |
|
题解:
简单的递归:
1 | int change(int bottlenums, int changenums,int drinknums) { |
10.2换水问题二
题目:
1 | 给你两个整数 numBottles 和 numExchange 。 |
示例:

1 | 输入:numBottles = 13, numExchange = 6 |
题解:
数学解方程
1 | int maxBottlesDrunk(int numBottles, int numExchange) { |
10.3接雨水二
题目:
1 | 给你一个 m x n 的矩阵,其中的值均为非负整数,代表二维高度图每个单元的高度,请计算图中形状最多能接多少体积的雨水。 |
示例:

1 | 输入: heightMap = [[1,4,3,1,3,2],[3,2,1,3,2,4],[2,3,3,2,3,1]] |
题解
1 | #include <stdio.h> |
10.4盛最多水的容器
题目:
1 | 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 |
示例:

1 | 输入:[1,8,6,2,5,4,8,3,7] |
题解:
双指针:
1 | int max(int a, int b) { |
10.5太平洋大西洋水流问题
题目:
1 | 有一个 m × n 的矩形岛屿,与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界,而 “大西洋” 处于大陆的右边界和下边界。 |
示例:

1 | 输入: heights = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5],[5,1,1,2,4]] |
题解:
dfs
1 | /** |
10.6水位上升的游泳池游泳
题目:
1 | 在一个 `n x n` 的整数矩阵 `grid` 中,每一个方格的值 `grid[i][j]` 表示位置 `(i, j)` 的平台高度。 |
示例:

1 | 输入: grid = [[0,2],[1,3]] |
题解:
1 | int directions[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}}; |
10.14检测相邻递增子数组一
题目:
1 | 给你一个由 `n` 个整数组成的数组 `nums` 和一个整数 `k`,请你确定是否存在 **两个** **相邻** 且长度为 `k` 的 **严格递增** 子数组。具体来说,需要检查是否存在从下标 `a` 和 `b` (`a < b`) 开始的 **两个** 子数组,并满足下述全部条件: |
示例:
1 | **输入:**nums = [2,5,7,8,9,2,3,4,3,1], k = 3 |
题解:
1 | int max(int a, int b) { |
10.17执行操作后的最大分割数量
题目:
1 | 给你一个下标从 0 开始的字符串 s 和一个整数 k。 |
示例:
1 | 输入:s = "accca", k = 2 |
题解:
1 | #include <stdio.h> |
10.18执行操作后不同元素的最大数量
题目:
1 | 给你一个整数数组 nums 和一个整数 k。 |
示例 :
1 | **输入**:nums = [1,2,2,3,3,4], k = 2 |
题解:
1 | int compare(const void* a, const void* b) { |
10.19
题目:
1 | 给你一个字符串 s 以及两个整数 a 和 b 。其中,字符串 s 的长度为偶数,且仅由数字 0 到 9 组成。 |
示例:
1 | 输入:s = "5525", a = 9, b = 2 |
题解:
1 | char * findLexSmallestString(char * s, int a, int b) { |