题解 | #数组单调和(小和问题)#

数组单调和

http://www.nowcoder.com/questionTerminal/8397609ba7054da382c4599d42e494f3

问题转化:求单调和(小和)就是统计该元素前有多少小于等于该数的元素之和。问题和归并两个有序数组求小于等于该数的元素之和一样。所以现在的问题变为统计子问题中单调和。

        // 当出现nums[i]<=nums[j]时,统计所有前半段区间内比nums[j]小的数
        // 当前一个数组元素小于或等于后一个数组元素时,累加小和
        // s[i] <= s[j] -> s[i] <= s[j]...s[right]
		while (p1 <= mid && p2 <= right) {
            if (a[p1] <= a[p2]){
                //当出现nums[i]<=nums[j]时,统计所有前半段区间内比nums[j]小的数
                // 当前一个数组元素小于或等于后一个数组元素时,累加小和
                // s[i] <= s[j] -> s[i] <= s[j]...s[right]
                res += a[p1] * (right - p2 + 1);
                temp[k++] = a[p1++];               
            } else{
                temp[k++] = a[p2++];
            }               
        }
全部评论

相关推荐

09-01 21:40
已编辑
同济大学 Java
点赞 评论 收藏
分享
27届毕业,最近想找一段大厂实习,感觉简历有些问题,好多都不给面,求大佬们指点,最近好焦虑
后端劝退第91人:我从后端的角度分析一下你的第一个项目,我感觉亮点不是很突出。因为我是因为组内有需求,临时上手学react干活。我用到的技术基本就cover你那个智慧园区管理平台的很多亮点了。那作为比较专业的前端,你上述的内容是不是有点单薄呢。感觉还得包装
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务