题解 | #矩阵乘法计算量估算#

矩阵乘法计算量估算

https://www.nowcoder.com/practice/15e41630514445719a942e004edc0a5b

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct{
    int row;
    int col;
}RCT;

int _lastRctType = 0;
int rctLen = 0;
int _sum = 0;

int comput1(RCT* arr, int* computArr,int len)
{
    int retsum = 0;
    RCT a0 =arr[computArr[len-1] -'A'];
    for(int i = len-1; i > 0; i--)
    {
        retsum += a0.row * a0.col * arr[computArr[i-1] -'A'].col;
        a0.col = arr[computArr[i-1] -'A'].col;
    }
    arr[rctLen] = a0;
    _lastRctType = rctLen + 'A';
    rctLen++;
    
    return retsum;
}

int getValue(RCT* arr, char* str)
{
    int stack[16];
    int top = 0;
    int strLen = strlen(str);
    int computeArr[16] = {0};
    int computeArrLen = 0;

    for(int i = 0; i <strLen; i++)
    {
        if(')' == str[i] || (i == strLen-1)){
            //comput
            while(stack[top-1] != '(' && top >= 1)
            {
                computeArr[computeArrLen++] = stack[top-1];
                top--;
            }
            top--;//去 '('
            _sum += comput1(arr,computeArr,computeArrLen);
            stack[top++] = _lastRctType;
            computeArrLen = 0;
        }
        else {
            stack[top++] = str[i];
        }
    }

    return _sum;
}

int main() {
    RCT rec[100] = {0};
    int n;
    int row,col;
    scanf("%d",&n);
    for(int i = 0; i < n; i++)
    {
        scanf("%d %d",&row,&col);
        rec[i] = (RCT){row,col};
        rctLen++;
    }
    char str[128] = {0};
    scanf("%s",str);

    printf("%d",getValue(rec, str));
    return 0;
}

全部评论
此方法考虑了多个矩阵连乘的情况 ABCD,所以稍微复杂些
点赞 回复 分享
发布于 03-16 17:14 广东

相关推荐

10-15 15:00
潍坊学院 golang
跨考小白:这又不是官方
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
11-28 17:58
门头沟学院 Java
美团 JAVA开发 n×15.5
牛客786276759号:百度现在晋升很难的 而且云这块的业务没美团好 你看百度股价都跌成啥样了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务