问题描述
给定一个整数数组instrution,你从左到右把每个元素加入到数组nums中(初始为空),每次加入使得nums的数有序。每次加入的代价是下面两个数的最小值:
- nums中严格小于当前这个元素的数的个数
- nums中严格大于当前这个元素的数的个数
代码
import bisect
import numpy as np
class Solution(object):
def createSortedArray(self, instructions):
"""
:type instructions: List[int]
:rtype: int
"""
maxvalue = max(instructions) #find the maximum value from the list
bitTree=[0]*(maxvalue+1)
def update(x):
while(x<len(bitTree)):
bitTree[x] = bitTree[x]+1
x = x + (x&-x)
def getLetf_sum(x):
count =0
while(x>0):
count+=bitTree[x]
x = x-(x&-x)
return count
reslut= 0
for idx,inst in enumerate(instructions):
left = getLetf_sum(inst-1)
right = idx- getLetf_sum(inst)
update(inst)
# print(idx,left,right)
reslut = reslut+ min(right,left)
return reslut%(10**9 + 7)