首先,要使得the sum of each subarray of length k is equal
,说明sum[0:k-1] = sum[1:k]
,马上可知nums[0]=nums[k]
,同理推得间隔k的元素都相等nums[i]=nums[i+k]
。根据这个规则,我们可以将必须相等的元素归为一组。具体的说,我们从0开始,那么0,k,2k,3k,...
分在一组,1,1+k,1+2k,1+3k,...
分在一组,以此类推。
注意到数组是循环的,所以我们可以需要将数组遍历若干圈之后才能将属于同一组的元素都穷举完。比如n=10, k=4的时候,0,4,8,2,6
属于同一组。
将所有的元素都分组完毕之后,为了将组内元素都搞成同一个值,显然最优解就是统一成该组里的中位数m,可以保证sum|xi-m|
最小。