Easy

题目描述

给定两个整数 numt。如果一个数字 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)只使用常数级别的额外空间