n≤100,可枚举所有连续子区间 [i,j]。对每个固定左端点 i,从左到右扩展右端点,并用有序插入维护当前区间的排序数组;每次扩展后按奇偶长度取中位数并累加。
偶数长度 k=2m 时,中间两数为有序数组下标 m−1 与 m,取较小者即 cur[k/2-1];奇数取 cur[k/2]。
常见假解:偶数长度取较大者或取平均;只统计奇数长度子数组。
给出一个整数序列 numbers,元素值各不相同。请计算所有连续子序列的中位数之和。
中位数定义:将一组数据按从小到大顺序排列起来,形成一个新序列,居于新序列中间位置的那个数是中位数。即:
1 <= numbers.length <= 100,0 <= numbers[i] <= 10^5,且元素值各不相同。
一个整数,表示所计算的中位数之和。
输入:
[1, 5, 7, 4]
输出:
41
解释:
所包含的所有连续子序列,及其中位数如下:
[1] 的中位数是 1[1, 5] 的中位数是 1[1, 5, 7] 的中位数是 5[1, 5, 7, 4],排序后为 [1, 4, 5, 7],其中位数是 4[5] 的中位数是 5[5, 7] 的中位数是 5[5, 7, 4] 的中位数是 5[7] 的中位数是 7[7, 4] 的中位数是 4[4] 的中位数是 4所以最终答案为 1 + 1 + 5 + 4 + 5 + 5 + 5 + 7 + 4 + 4 = 41。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.