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

矩阵乘法计算量估算

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

总体没有特别需要解释的。

比较在意的一点:如果出现(A(ABC)D),类似这种一个括号里有超过2个矩阵的例子,应该如何计算。

import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner scan=new Scanner(System.in);
        int n=scan.nextInt();
        int[][] matrix=new int[n][2];//储存矩阵内容
        for(int i=0;i<n;i++){
            matrix[i][0]=scan.nextInt();
            matrix[i][1]=scan.nextInt();
        }
        String input=scan.next();//输入的计算法则

        //输出结果
        System.out.println(solve(matrix,input));
    }

    //解决方案
    public static int solve(int[][] matrix, String input){
        int sum=0;
        Stack<Integer> stack=new Stack<>();//储存参与运算的矩阵
        for(int i=0;i<input.length();i++){
            char item=input.charAt(i);
            int location=item-'A';
            //如果字符为字母,则将该字母对应矩阵内容放入栈中,并记录存储了1个矩阵
            if(item<='Z' && item>='A'){
                stack.push(matrix[location][0]);
                stack.push(matrix[location][1]);
            }else if(item==')'){//如果字符为“)”,则表示第一个括号结束,可以开始计算
                    int y1=stack.pop();
                    int x1=stack.pop();
                    int y0=stack.pop();
                    int x0=stack.pop();
                    //计算乘法次数,并加入sum
                    sum+=x0*y0*y1;
                    //将新得到的矩阵放入栈中
                    stack.push(x0);
                    stack.push(y1);
            }else if(item=='('){
                continue;
            }
            
        }
        return sum;
    }
}

全部评论

相关推荐

吐泡泡的咸鱼:我也工作了几年了,也陆陆续续面试过不少人,就简历来说,第一眼学历不太够,你只能靠你的实习或者论文或者项目经历,然后你没有论文,没有含金量高的比赛和奖项,只能看实习和项目,实习来说,你写的实习经历完全不清楚你想找什么工作?行研?数据分析?且写的太少了,再看项目,这些项目先不说上过大学读过研究生的都知道很水,然后对你想找的岗位有什么帮助呢?项目和实习也完全不匹配啊,你好像在努力将你所有的经历都放在简历里想表现你的优秀,但是对于你想找的岗位来说,有什么用呢?最后只能获得岗位不匹配的评价。所以你需要明白你想要找的岗位要求是什么,是做什么的,比如产品经理,然后再看你的经历里有什么匹配的上这个岗位,或者对这个岗位以及这个岗位所在的公司有价值,再写到你的简历上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务