• 算法复习___二分_矩阵连乘


    IoUtil接口:

    import java.util.List;
    
    
    public interface IoUtil {
        public int getInt();
        public List<Integer> getIntList(int n);
        public int[] getIntArray(int n);
        public double getDouble();
        public List<Double> getDoubleList(int n);
        public double[] getDoubleArray(int n);
        
    }

    IoUtilImpl接口实现类:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    
    public class IoUtilImpl implements IoUtil {
        public static Scanner cin;
        static{
            cin = new Scanner(System.in);
        }
        @Override
        public double getDouble() {
            return cin.nextDouble();
        }
    
        @Override
        public List<Double> getDoubleList(int n) {
            ArrayList<Double> list = new ArrayList<Double>();
            for(int i = 0; i < n; i++){
                list.add(cin.nextDouble());
            }
            return list;
        }
    
        @Override
        public int getInt() {
            return cin.nextInt();
        }
    
        @Override
        public List<Integer> getIntList(int n) {
            ArrayList<Integer> list = new ArrayList<Integer>();
            for(int i = 0; i < n; i++){
                list.add(cin.nextInt());
            }
            return list;
        }
    
        @Override
        public double[] getDoubleArray(int n) {
            double[] m = new double[n];
            for(int i = 0; i < n; i++){
                m[i] = cin.nextDouble();
            }
            return m;
        }
    
        @Override
        public int[] getIntArray(int n) {
            int[] m = new int[n];
            for(int i = 0; i < n; i++){
                m[i] = cin.nextInt();
            }
            return m;
        }
    
    }

    二分主类:

    import java.util.Arrays;
    
    
    public class 二分 {
        public static int maxi, minj;
        public static boolean erFen(int[] m, int l, int r, int x){
            int mid;
            while(l <= r){
                mid = (l + r) / 2 ;
                if(x == m[mid]){
                    maxi = minj = mid;
                    return true;
                }
                if(x <= m[mid])
                    r = mid - 1;
                else
                    l = mid + 1;
            }
            maxi = l - 1;
            minj = l;
            return false;
        }
        public static void main(String[] args) {
            int n;
            int a[];
            int x;
            IoUtilImpl util;
            util= new IoUtilImpl();
            System.out.println("请输入数组长度n:");
            n = util.getInt();
            System.out.println("请输入 " + n + " 个数组元素");
            a = util.getIntArray(n);
            Arrays.sort(a);
            while(true){
                System.out.println("请输入要查找的元素x(x=0 时退出)");
                x = util.getInt();
                if(x == 0){
                    break;
                }
                if(erFen(a, 0, n - 1, x)){
                    System.out.println("可以查到元素 " + x);
                    System.out.println("该元素在第 " + maxi + " 个位置");
                }else{
                    System.out.println("不能查到元素" + x);
                    System.out.println("元素  " + x + " 在位置 " + maxi + " 和位置 " + minj + " 之间");
                }
            }
            
        }
    }

     矩阵连乘:不知道对不对,好像错了,先放着:

    import java.util.Scanner;
    
    
    class Matrix{
        int l;
        int r;
        static Scanner cin;
        static{
            cin = new Scanner(System.in);
        }
        public Matrix() {
            
        }
        public Matrix(int l, int r){
            this.l = l;
            this.r = r;
        }
        public void input(){
            l = cin.nextInt();
            r = cin.nextInt();
        }
    }
    public class 矩阵连乘 {
        public static Matrix[] matrix;
        public static int[][] m;
        public static int n;
        public static IoUtilImpl util;
        static{
            util = new IoUtilImpl();
        }
        static void init(){
            for(int i = 0; i < n; i++){
                m[i][i] = 0;
                int l = matrix[i].l, mid, r;
                int sum = 0;
                for(int j = i + 1; j < n; j++){
                    mid = matrix[j].l;
                    r = matrix[j].r;
                    sum += l * mid * r;
                    m[i][j] = m[j][i] = sum;
                }
            }
        }
        public static void main(String[] args) {
            System.out.println("请输入矩阵个数n:");
            n = util.getInt();
            matrix = new Matrix[n];
            m = new int[n][n];
            System.out.println("请输入这n个矩阵:");
            for(int i = 0; i < n; i++){
                Matrix x = new Matrix();
                x.input();
                matrix[i] = x;
            }
            init();
            for(int i = 0; i < n; i++){
                for(int j = i + 1; j < n; j++){
                    for(int k = i; k < j; k++){
                        m[i][j] = Math.min(m[i][j], m[i][k] + m[k + 1][j] + matrix[i].l*matrix[k].r*matrix[j].l);
                    }
                }
            }
            System.out.println("最小连乘次数是: " + m[0][n - 1]);
        }
    }
  • 相关阅读:
    Zabbix学习记录
    json_encode 函数使用中报错提示缺少两个参数
    MAC 上搭建一个本地LNMP环境学习laravel(一)
    mysql root 密码重置
    phpstorm格式化代码导致模板报错
    Get 和 Post
    axios设置请求超时时间 timeout
    charles安装配置 for Mac
    让 div 的高度等于宽度,的小技巧
    Git命令行删除本地和远程分支
  • 原文地址:https://www.cnblogs.com/handsomecui/p/6252939.html
Copyright © 2020-2023  润新知