题目
给你一个整数数组 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
是 平衡数组 的 方案数 。
示例 1:
1 | 输入:nums = [2,1,6,4] |
示例 2:
1 | 输入:nums = [1,1,1] |
解析
这道题我的第一想法是用暴力拆解法,直接双层for循环去遍历,尝试了一下,可以实现,但是超出了时间限制。然后就去看题解,可能理解能力有限,一直没看懂他们表达的意思,于是我就去找规律,通过找到的已知变量来进行数学公式的变换,于是就理解了。如下是我找的规律
以 nums = [6,1,7,4,1]
为例
我们以 7
为界,其索引是偶数,可以找到以下规律
总偶数和 = 左边的偶数和(6)+ 右边的偶数和(1) + 当前数(7)
总奇数和 = 左边的奇数和(1)+ 右边的奇数和(3)
我们再以 1
为界,其索引是奇数,可以找到以下规律
总偶数和 = 左边的偶数和(6)+ 右边的偶数和(7,1)
总奇数和 = 左边的奇数和()+ 右边的奇数和(4)+ 当前数(1)
最后我们删除 7
的时候,即数组剩下 nums = [6,1,4,1]
(下面总奇偶数和指的是删除7之后的数组总奇偶数和),可以找到一下规律
总偶数和 = 左边的偶数和(6)+ 右边的奇数和(4)
总奇数和 = 左边的奇数和(1)+ 右边的偶数和(1)
总结
如果要得出平衡数组,只需要 总偶数和 === 总奇数和
,即
- 左边的偶数和 + 右边的奇数和 === 左边的奇数和 + 右边的偶数和
代码
根据上面获得规律,我们可以写出代码
1 | var waysToMakeFair = function(nums) { |