复盘
天才不存在,只是有些人一开始就找到了正确的方式,而另外一些人直到最后都沿着错误路线走到底。那么开始复盘,从一道简单的题开始:
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
是 平衡数组 的 方案数 。
还记得吧,那个时候我说某道题很难,但是另一个同学说很简单,然后复述了一遍老师的话,考试的时候它也没做出来。所以我不想复制别人的想法,然后以为某件事很简单,这里面一定要有自己的思考不然做这些题就没有任何意义。
结果证明我的坚持没有意义,我的想法总是存在漏洞,而且我还很难察觉,不知道错在哪,更不愿意怀疑,模仿别人的思路也只是东施效颦。还是要自己想,但是要修正根本的部分。
这一题我的思路是暴力,对于每一个被删除的位置而言,前面的下标不变,后面的下标奇偶会互换,枚举每一个位置,用前缀和快速计算两种下标的和就行了。
首先,单独思考每一个位置是正确的,从单个位置来思考这一点没错。然后这个位置前后两种情况的分类讨论就错了。也不算全错,但我单独判断了前后两个子数组是否都是平衡数组,从这里开始就走远了,这里应该从全局思考想办法判断整个数组,而不是拆成两部分,这么做无形之中就把简单的问题变复杂了。如果能够跳出分别判断前后这种思路的话,是能做出来的。
我突然发现漏洞所在了:前半部分跟后半部分都平衡的话,那么整体一定也是平衡的;但即使前半部分或后半部分某一个不是平衡数组,整体也有可能是平衡的。
问题出在我只思考了都平衡的情况,就开始顺着这个思路走了。
这种也不是一次两次了,好多事都是这样,顺着自己的思路总是不顺利,模仿别人也只是一种伪装,只是表皮级别的模仿,根本没有触及到问题的核心。
好麻烦啊,说的越多越觉得麻烦,但还是得一步一步思考,不能跳过任何一个步骤。还有就是,时不时回头看看是不是从一开始就想错了。
还有最重要的,没有必要去模仿任何人的任何想法。
不管做什么唯一的途径只有不停思考,练习。