zoukankan      html  css  js  c++  java
  • 滴滴出行2015在线笔试题目

    最大子矩阵

    题目:求一个矩阵中最大2*2矩阵(元素和最大)的和。

    如:

    1 2 3 0 4

    2 3 4 5 1

    1 1 5 3 0

    中最大的是

    4 5

    5 3

    和为17

    输入:m*n的矩阵

    输出:该m*n矩阵的最大2*2子矩阵的和。

    例如输入:

    1 2 0 3 4 ; 2 3 4 5 1; 1 1 5 3 0

    输出:

    17

    分析:这道题目是一道OJ的题目,原题是求最大子矩阵的和,题目里子矩阵是随意的,没有2*2的限制。这里2*2子矩阵是将问题简化了。最蛋疼的是,问题的输入格式太奇葩,大部分时间都花在调这个输入格式上了!!!最简单的方法是对矩阵进行遍历,得到最大子矩阵的和即可。不得不说的是,如果这个题目不考输入输出,真心不知道是要考察什么。

    package com.didi;
    
    import java.util.Scanner;
    
    /**
     * Created by fang on 2015/9/25.
     */
    
    
    class Solution {
        public int maxSubMatrix(int[][] matrix) {
            int result = Integer.MIN_VALUE;
    
            for (int i = 0; i < matrix.length - 1; i++) {
                for (int j = 0; j < matrix[0].length - 1; j++) {
                    int tempSum = matrix[i][j] + matrix[i][j + 1] + matrix[i + 1][j] + matrix[i + 1][j + 1];
                    result = Math.max(result, tempSum);
                }
            }
    
            return result;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();
            String[] lines = line.split(";");
            int row = lines.length;
    
            String[] line2 = line.split(" ");
            int col = (line2.length - row + 1) / row;
    
    
            int[][] matrix = new int[row][col];
    
            for (int i = 0; i < row; i++) {
                String str = lines[i];
                String[] temp = str.split(" ");
                int k = 0;
                for (int j = 0; j < temp.length; j++) {
                    if (!temp[j].equals(" ") && !temp[j].equals("")) {
                        matrix[i][k++] = Integer.parseInt(temp[j]);
                    }
                }
            }
    
    
            Solution sln = new Solution();
            int result = sln.maxSubMatrix(matrix);
            System.out.println(result);
        }
    }
    

    最长和为0的子序列

    输入:

    所有数据在一行,元素之间用空格隔开

    输出:

    所有数据在一行,元素之间用空格隔开

    样例输入:

    1 2 3 4 -1 -2 -4 -3 1 2

    样例输出:

    1 2 3 4 -1 -2 -4 -3

    import java.util.ArrayList;
    import java.util.Scanner;
    
    /**
     * Created by fang on 2015/9/25.
     */
    class Interval {
        int start;
        int end;
    
        public Interval(int start, int end) {
            this.end = end;
            this.start = start;
        }
    
        public int getLength() {
            return Math.abs(end - start + 1);
        }
    }
    
    class Solution {
        public int[] getMaxZero(int[] nums) {
            int thisSum = 0;
            ArrayList<Interval> intervals = new ArrayList<>();
    
            for (int i = 0; i < nums.length; i++) {
                thisSum = nums[i];
                for (int j = i + 1; j < nums.length; j++) {
                    thisSum += nums[j];
                    if (thisSum == 0) {
                        Interval interval = new Interval(i, j);
                        intervals.add(interval);
                    }
                }
            }
    
    //        Collections.sort(intervals, new Comparator<Interval>() {
    //            @Override
    //            public int compare(Interval o1, Interval o2) {
    //                return o1.getLength() > o2.getLength() ? 1 : 0;
    //            }
    //        });
    
            intervals.sort((Interval i1, Interval i2) -> i1.getLength() > i2.getLength() ?
                    1 : (i1.getLength() == i2.getLength() ? 0 : -1));
    
            Interval maxInterval = intervals.get(intervals.size() - 1);
    
            int[] result;
            result = new int[maxInterval.getLength()];
            System.arraycopy(nums, maxInterval.start, result, 0, maxInterval.getLength());
    
            return result;
        }
    }
    
    public class Main {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String line = sc.nextLine();
            String[] strs = line.split(" |,");
            int[] nums = new int[strs.length];
    
            for (int i = 0; i < nums.length; i++) {
                nums[i] = Integer.parseInt(strs[i]);
            }
    
            Solution sln = new Solution();
            int[] result = sln.getMaxZero(nums);
    
            for (int i : result) {
                System.out.print(i + " ");
            }
        }
    }
    

      

  • 相关阅读:
    设计模式复习-简单工厂模式
    神经网络与机器学习 笔记—基本知识点(上)
    声明:songzijian这个域名已经被抢注。大家别上了。不是我了。
    《NO STRATEGY》《重塑战略》
    《THE LEAN STARTUP》 《精益创业》
    逆向与分析-WebBrowserPassView消息分析
    HTTP1.0,1.1,2.0,HTTPS
    Linux-鸟菜-7-Linux文件系统-EXT
    Linux-鸟菜-6-文件搜索
    反弹代理环境的搭建
  • 原文地址:https://www.cnblogs.com/fangying7/p/4840429.html
Copyright © 2011-2022 走看看