题目
给你一个整数数组 nums ,如果 nums 至少 包含 2 个元素,你可以执行以下操作:
- 选择
nums中的前两个元素并将它们删除。
一次操作的 分数 是被删除元素的和。
在确保 所有操作分数相同 的前提下,请你求出 最多 能进行多少次操作。
请你返回按照上述要求 最多 可以进行的操作次数。
思路
先记录数组前两项的和, 将这个和与之后的每两个数和进行判断, 如果相同则 ans + 1 , 如果不同就返回 ans . 使用一个变量 cnt 来记录当前是第几个数(也可以用取余的方式? 没有试过),如果是第二个数就需要判断 临时和与 前两个数和是否相等, 如果不相等 cnt 的值就会变成 3 则 退出循环
代码
class Solution {
public int maxOperations(int[] nums) {
//记录当前是第几个数
int cnt = 0;
int sum = nums[0] + nums[1];
//记录每两个数的和
int tempSum = 0;
// 从 2 开是遍历 ans 为 1
int ans = 1;
for (int i = 2; i < nums.length; i++) {
//每遍历一个数 cnt ++
cnt++;
tempSum += nums[i];
//当加到第二个数的时候就判断是否相等, 如果相等就将 cnt 和 tempSum 的值都变为 0 并且 ans++
if (cnt == 2 && tempSum == sum) {
cnt = 0;
tempSum = 0;
ans++;
}
//如果不相等的话会多进行一次循环, cnt 变成 3 就退出循环并且 ans 也不受影响
if (cnt > 2) {
break;
}
}
return ans;
}
}
题解
灵神题解: leetcode.cn/problems/ma…
灵神的代码好简洁...