comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
简单 |
1201 |
第 124 场双周赛 Q1 |
|
给你一个整数数组 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
我们先计算前两个元素的和,记为
时间复杂度
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
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;
}
}
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;
}
};
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
}
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;
}