题解 | #计算数组的小和# Go实现

计算数组的小和

https://www.nowcoder.com/practice/edfe05a1d45c4ea89101d936cac32469

package main

import (
	"fmt"
)

func main() {
    var arr []int
    var n, tmp int
    fmt.Scan(&n)
    for i := 0; i < n; i++ {
        fmt.Scan(&tmp)
        arr = append(arr, tmp)
    }
    fmt.Println(Process(arr, 0, len(arr)))
}

// Process [l, r)
func Process(arr []int, l int, r int) int {
	if l+1 >= r {
		return 0
	}
	mid := l + (r-l)>>1
	return Process(arr, l, mid) + Process(arr, mid, r) + merge(arr, l, r)
}

// merge [l, r)
func merge(arr []int, l int, r int) (sum int) {
	var help []int
	mid := l + (r-l)>>1
	i, j := l, mid
	for i < mid && j < r {
		if arr[i] <= arr[j] {
            sum += (r - j) * arr[i]
			help = append(help, arr[i])
			i++
		} else {
			help = append(help, arr[j])
			j++
		}
	}

	for i < mid {
		help = append(help, arr[i])
		i++
	}
	for j < r {
		help = append(help, arr[j])
		j++
	}

	// copy help to arr
	copy(arr[l:r], help)
    return sum
}

全部评论

相关推荐

头像 会员标识
11-27 17:08
已编辑
牛客_产品运营部_私域运营
腾讯 普通offer 24k~26k * 15,年包在36w~39w左右。
点赞 评论 收藏
分享
伟大的烤冷面被普调:暨大✌🏻就是强
点赞 评论 收藏
分享
走不到的路就这样算了吗:大佬硬气
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务