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

矩阵乘法计算量估算

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

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Stack;

/**
 * 矩阵乘法计算量估算
 * eg:((AB)C),(C(AB)),这里没规定必须是按照字母顺序出现的,故将字母与矩阵数组联系起来是个问题
 * 解决:遍历字母出现和数组下标的顺序是一致的,设置了一个rank标志将数组合字母联系起来
 * stack也可以存int[]
 * 这里与四则运算不同,都是乘法,不必考虑运算顺序,
 * 题目说保证给出的字符串表示的计算顺序唯一,故每两个元素一定是有括号的
 * 即这里给的直接就是后缀表达式,遇到)就相当于是*.
 */
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[][] v= new int[N][2];
        for (int i = 0; i < N; i++) {
            String[] t=br.readLine().split(" ");
            v[i][0]=Integer.parseInt(t[0]);
            v[i][1]=Integer.parseInt(t[1]);
        }
        String s=br.readLine();
        char[] op = s.toCharArray();
        Stack<int[]> stack= new Stack<>();
        int rank=0;
        int res=0;
        for (int i = 0; i < op.length; i++) {
            if(Character.isAlphabetic(op[i]))
                stack.push(v[rank++]);
            else if(op[i]==')') {
                int[] o2=stack.pop();
                int[] o1=stack.pop();
                res+=o1[0]*o1[1]*o2[1];
                stack.push(new int[]{o1[0],o2[1]});
            }
        }
        System.out.println(res);
    }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司10个岗位
点赞 评论 收藏
分享
11-04 19:05
已编辑
东莞城市学院 单片机
不知道怎么取名字_:你这个要实习两年?哪有这么久的,感觉就是即使你毕业了,但还按实习的话,是不是不用给你缴社保公积金啥的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务