刷题的日常-生成平衡数组的方案数

79 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 13 天,点击查看活动详情

刷题的日常-2023年2月10号

一天一题,保持脑子清爽

生成平衡数组的方案数

来自leetcode的 1664 题,题意如下:

给你一个整数数组 nums 。你需要选择 恰好 一个下标(下标从 0 开始)并删除对应的元素。请注意剩下元素的下标可能会因为删除操作而发生改变。

比方说,如果 nums = [6,1,7,4,1] ,那么:

  • 选择删除下标 1 ,剩下的数组为 nums = [6,7,4,1]
  • 选择删除下标 2 ,剩下的数组为 nums = [6,1,4,1]
  • 选择删除下标 4 ,剩下的数组为 nums = [6,1,7,4] 。 如果一个数组满足奇数下标元素的和与偶数下标元素的和相等,该数组就是一个 平衡数组

请你返回删除操作后,剩下的数组 nums 是 平衡数组方案数

理解题意

通过题意,我们可以将信息整理如下:

  • 题目给出一个数组
  • 然后要求我们删除其中一个数,使得删除后的数组里,奇数下标的和 与 偶数下标的和相等
  • 返回能够删除的原数组元素个数

做题思路

题目要求我们删除一个元素之后求 删除之后 奇偶位置的和一致。那么我们可以先算出原数组奇偶和元素的总和。再来看看删除后的数组,从删除位置开始往后,奇偶位置其实就和原数组相反了,这时只需要调换一下原数组在删除元素之后的奇偶和就可以了。步骤如下:

  • 首先计算原数组的奇偶和
  • 然后从前往后扫描数组
  • 去除当前数,将后续的奇偶和调换顺序加上当前扫描得出的奇偶和
  • 如果奇偶和相同,结果加一
  • 返回最终结果

代码实现

代码实现如下:

image.png

image.png