Easy
题目描述
给定两个整数 num 和 t。如果一个数字 x 能够在应用以下操作最多 t 次后变得等于 num,那么这个数字就是可达成的:
- 将
x增加或减少 1,同时将num增加或减少 1。
返回 x 的最大可能值。
示例 1:
输入:num = 4, t = 1
输出:6
解释:
对最大可达成数字应用以下操作一次,使其等于 num:
- 将最大可达成数字减少 1,将 num 增加 1。
示例 2:
输入:num = 3, t = 2
输出:7
解释:
对最大可达成数字应用以下操作两次,使其等于 num:
- 将最大可达成数字减少 1,将 num 增加 1。
约束条件:
1 <= num, t <= 50
提示:
- 设 x 为答案,在每次操作中减少 x 并增加 num 总是最优的。
解题思路
这是一个简单的数学问题。我们需要理解题目的核心:
问题分析:
- 我们要找到一个数字 x,经过最多 t 次操作后能够等于 num
- 每次操作可以让 x 增减 1,同时让 num 也增减 1
- 目标是让 x 的初始值尽可能大
关键洞察: 根据提示,为了让 x 的初始值最大,我们应该在每次操作中都让 x 减 1,同时让 num 加 1。这样 x 和 num 的差值每次操作会减少 2。
数学推导:
- 设初始时 x 的值为 answer,num 的值为 num
- 经过 t 次操作后:x 变为 (answer - t),num 变为 (num + t)
- 要使它们相等:answer - t = num + t
- 解得:answer = num + 2t
这个结果很直观:要让 x 尽可能大,我们就让它每次都减 1,同时让 num 每次都加 1,这样经过 t 次操作后,它们的距离缩短了 2t。
代码实现
class Solution {
public:
int theMaximumAchievableX(int num, int t) {
return num + 2 * t;
}
};
class Solution:
def theMaximumAchievableX(self, num: int, t: int) -> int:
return num + 2 * t
public class Solution {
public int TheMaximumAchievableX(int num, int t) {
return num + 2 * t;
}
}
var theMaximumAchievableX = function(num, t) {
return num + 2 * t;
};
复杂度分析
| 复杂度类型 | 复杂度 | 说明 |
|---|---|---|
| 时间复杂度 | O(1) | 只需要进行一次简单的数学计算 |
| 空间复杂度 | O(1) | 只使用常数级别的额外空间 |