3038. 相同分数的最大操作数目 I
题目描述
给你一个整数数组 nums
,如果 nums
至少 包含 2
个元素,你可以执行以下操作:
- 选择
nums
中的前两个元素并将它们删除。
一次操作的 分数 是被删除元素的和。
在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。
请你返回按照上述要求 最多 可以进行的操作次数。
示例 1:
输入:nums = [3,2,1,4,5] 输出:2 解释:我们执行以下操作: - 删除前两个元素,分数为 3 + 2 = 5 ,nums = [1,4,5] 。 - 删除前两个元素,分数为 1 + 4 = 5 ,nums = [5] 。 由于只剩下 1 个元素,我们无法继续进行任何操作。
示例 2:
输入:nums = [3,2,6,1,4] 输出:1 解释:我们执行以下操作: - 删除前两个元素,分数为 3 + 2 = 5 ,nums = [6,1,4] 。 由于下一次操作的分数与前一次不相等,我们无法继续进行任何操作。
提示:
2 <= nums.length <= 100
1 <= nums[i] <= 1000
解法
方法一:遍历
我们先计算前两个元素的和,记为 $s$,然后遍历数组,每次操作取两个元素,如果和不等于 $s$,则停止遍历。最后返回操作次数即可。
时间复杂度 $O(n)$,其中 $n$ 是数组 $nums$ 的长度。空间复杂度 $O(1)$。
Python3
class Solution:
def maxOperations(self, nums: List[int]) -> int:
s = nums[0] + nums[1]
ans, n = 0, len(nums)
for i in range(0, n, 2):
if i + 1 == n or nums[i] + nums[i + 1] != s:
break
ans += 1
return ans
Java
class Solution {
public int maxOperations(int[] nums) {
int s = nums[0] + nums[1];
int ans = 0, n = nums.length;
for (int i = 0; i + 1 < n && nums[i] + nums[i + 1] == s; i += 2) {
++ans;
}
return ans;
}
}
C++
class Solution {
public:
int maxOperations(vector<int>& nums) {
int s = nums[0] + nums[1];
int ans = 0, n = nums.size();
for (int i = 0; i + 1 < n && nums[i] + nums[i + 1] == s; i += 2) {
++ans;
}
return ans;
}
};
Go
func maxOperations(nums []int) (ans int) {
s, n := nums[0]+nums[1], len(nums)
for i := 0; i+1 < n && nums[i]+nums[i+1] == s; i += 2 {
ans++
}
return
}
TypeScript
function maxOperations(nums: number[]): number {
const s = nums[0] + nums[1];
const n = nums.length;
let ans = 0;
for (let i = 0; i + 1 < n && nums[i] + nums[i + 1] === s; i += 2) {
++ans;
}
return ans;
}