3038. 相同分数的最大操作数目 I

65 阅读1分钟

题目

给你一个整数数组 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…

灵神的代码好简洁...