列表

详情


OR30. 数组单调和

描述

现定义数组单调和为所有元素i的f(i)值之和。这里的f(i)函数定义为元素i左边(不包括其自身)小于等于它的数字之和。请设计一个高效算法,计算数组的单调和。

给定一个数组A同时给定数组的大小n,请返回数组的单调和。保证数组大小小于等于500,同时保证单调和不会超过int范围。

测试样例:
[1,3,5,2,4,6],6
返回:27

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 2ms, 内存消耗: 484KB, 提交时间: 2020-12-24

class MonoSum {
public:
    int calcMonoSum(vector<int> A, int n) {
        // write code here
        int *dp = new int[n]();
        int i,j;
        int sum=0;
        dp[0] = 0;
        dp[1] = (A[0] <= A[1])?A[0] : 0;
        for(i = 2; i < n; i++)
        {
            for(j = 0; j < i; j++)
                dp[i] += ((A[j] <= A[i]) ? A[j] : 0);
        }
        for(i=0;i<n;i++)
        {
            cout<<dp[i]<<" ";
            sum += dp[i];
        }
        return sum;
    }
};

C++ 解法, 执行用时: 3ms, 内存消耗: 420KB, 提交时间: 2022-05-11

class MonoSum {
public:
    int calcMonoSum(vector<int> A, int n) {
        // write code here
        int  count = 0;
       for(int i = 1 ; i < n ;i++){
           for(int j = i-1 ; j >= 0 ; j--){
               if(A[j]<=A[i]){
                   count += A[j];
               }
           }
       }
       return count;
    }
};

上一题