现定义数组单调和为所有元素i的f(i)值之和。这里的f(i)函数定义为元素i左边(不包括其自身)小于等于它的数字之和。请设计一个高效算法,计算数组的单调和。
给定一个数组A同时给定数组的大小n,请返回数组的单调和。保证数组大小小于等于500,同时保证单调和不会超过int范围。
测试样例:
[1,3,5,2,4,6],6
返回:27
从前往后遍历,先把前面的i个数按小到大排序,第i+1个到了以后插入第i+1个 使前i+1个从小到大排序,然后把前插入之后的的位置K前面的K-1个sum起来就好了。 def sort(data,i): temp = data[i] i = i-1 while i>=0 and temp<data[i]: data[i+1] = data[i] i-=1 data[i+1] = temp return sum(data[:i+1]) def ojbk(data): count =0 m = len(data) for i in range(1,m): count += sort(data,i) print(count)
#!/usr/bin/env python #-*- coding:utf8 -*- # -*- coding:utf-8 -*- class MonoSum: def calcMonoSum(self, A, n): # write code here nums = [0 for i in range(n)] for i in range(1,n): for j in range(i): if A[i] >= A[j]: nums[i] += A[j] return sum(nums)