华为OD机试 2024E卷题库疯狂收录中,刷题 <a rel="nofollow" href="https://blog.csdn.net/qq_40374604/category_12822407.html" style="color: red;">点这里</a>。

实战项目访问:http://javapub.net.cn/

专栏导读

本专栏收录于 《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》

刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。


矩阵乘法计算量估算

矩阵乘法的运算量与矩阵乘法的顺序强相关。

例如:

A是一个50×10的矩阵,B是10×20的矩阵,C是20×5的矩阵

计算A*B*C有两种顺序:((AB)C)或者(A(BC)),前者需要计算15000次乘法,后者只需要3500次。

编写程序计算不同的计算顺序需要进行的乘法次数。

数据范围:矩阵个数:1≤n≤15,行列数:1≤rowi,coli≤100,保证给出的字符串表示的计算顺序唯一。

输入描述:

输入多行,先输入要计算乘法的矩阵个数n,每个矩阵的行数,列数,总共2n的数,最后输入要计算的法则

计算的法则为一个字符串,仅由左右括号和大写字母('A'~'Z')组成,保证括号是匹配的且输入合法!

输出描述:

输出需要进行的乘法次数

示例1

输入:

3
50 10
10 20
20 5
(A(BC))

输出:3500


Java 编程

package cn.net.javapub.javaintroduction.example;

/**
 * @author: shiyuwang
 * @url: http://javapub.net.cn
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // Scanner sc = new Scanner(System.in);
        String str = null;
        while ((str = br.readLine()) != null) {
            int num = Integer.parseInt(str);
            int [][] arr = new int[num][2];

            for(int i = 0;i<num;i++) {
                String [] sa = br.readLine().split(" ");
                arr[i][0] = Integer.parseInt(sa[0]);
                arr[i][1] = Integer.parseInt(sa[1]);
            }

            int n = arr.length -1;
            char [] ca = br.readLine(). toCharArray();
            Stack<Integer> stack = new Stack<>();
            int sum = 0;
            for(int i = ca.length - 1;i>=0;i--) {
                char one = ca[i];
                if(one == ')') {
                    stack.push(-1);
                }else if(one == '(') {
                    int n1 = stack.pop();
                    int n2 = stack.pop();
                    sum+= arr[n1][0]*arr[n2][0]*arr[n2][1];
                    arr[n1][1] = arr[n2][1];
                    stack.pop();
                    stack.push(n1);
                }else {
                    stack.push(n);
                    n--;
                }
            }
            System.out.println(sum);
        }
    }

}

展示效果:

在这里插入图片描述

🏆下一篇: 华为OD机试 - 矩阵乘法 (Java 2024 E卷 100分) 🏆本文收录于, 搬砖工逆袭Java架构师

刷的越多,抽中的概率越大,私信javapub,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

优质合集推荐

《突击面试》Java面试题合集
《面试1v1》
《编程工作总结》