zoukankan      html  css  js  c++  java
  • java基础编程题(2)

    1、给定一个二叉树,找出其最大深度。

    注:二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public int maxDepth(TreeNode root) {
                    return root == null ? 0 : Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
        }
    }

     

    2、给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积。

     解题思路:

    (1)首先求出高度是 1 的矩形面积,也就是它自身的数,如图中橙色的 4,面积就是 4。

    (2)然后向上扩展一行,高度增加一,选出当前列最小的数字,作为矩阵的宽,求出面积,对应上图的矩形框。

    (3)然后继续向上扩展,重复步骤 2。

     

     

     以此类推

    class Solution {
        public int maximalRectangle(char[][] matrix) {
        if (matrix.length == 0) {
            return 0;
        }
        //保存以当前数字结尾的连续 1 的个数
        int[][] width = new int[matrix.length][matrix[0].length];
        int maxArea = 0;
        //遍历每一行
        for (int row = 0; row < matrix.length; row++) {
            for (int col = 0; col < matrix[0].length; col++) {
                //更新 width
                if (matrix[row][col] == '1') {
                    if (col == 0) {
                        width[row][col] = 1;
                    } else {
                        width[row][col] = width[row][col - 1] + 1;
                    }
                } else {
                    width[row][col] = 0;
                }
                //记录所有行中最小的数
                int minWidth = width[row][col];
                //向上扩展行
                for (int up_row = row; up_row >= 0; up_row--) {
                    int height = row - up_row + 1;
                    //找最小的数作为矩阵的宽
                    minWidth = Math.min(minWidth, width[up_row][col]);
                    //更新面积
                    maxArea = Math.max(maxArea, height * minWidth);
                }
            }
        }
        return maxArea;
        }
    }

    3、找出数组中重复的数字

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。例如,如果输入长度为7的数组{2, 3, 1, 0, 2, 5, 3},那么对应的输出是重复的数字2或者3。

    思路:从哈希表的思路拓展,重排数组:把扫描的每个数字(如数字m)放到其对应下标(m下标)的位置上,若同一位置有重复,则说明该数字重复。

    public static void main(String[] args) {
    //输入数组的长度;
            Scanner sc = new Scanner(System.in);
            System.out.print("请输入取值范围(0~n):" + "	");
            int n = sc.nextInt();
    
    //题目要求的数组
            ArrayList<Integer> arr = new ArrayList<>();
    //去重数组
            HashSet<Integer> mset = new HashSet<>();
    
            Random ran = new Random();
    //随机n次,产生n个数,存入数组中
            for (int i = 0; i < n; i++) {
    //产生一个0~n-1之间的随机数,存入数组
                int j = ran.nextInt(n);
                arr.add(j);
                mset.add(j);
            }
            System.out.println("------------------------[ 原始数据 ]------------------------");
            System.out.println("随机数组值为:" + arr);
            System.out.println("去重参考值为:" + mset);
    //------------------------------------------前期准备工作-------------------------------------------------------
    
    //这时候,得到了一个符合题目要求的数组;和一个没有重复的set集合
            if (arr.size() <= 0 || arr == null) {
                System.out.println("无效数组!");
            }
            if (arr.size() == mset.size()) {
                System.out.println("数组中无重复数字!");
            } else {
    //有重复数字,重复的数组为:arr数组减去无重复数组mset
                for (Integer integer : mset) {
    //得到该数字再arr数组中第一次的索引,删除
                    int i = arr.indexOf(integer);
                    arr.remove(i);
                }
    
    //再去重
                HashSet<Integer> list = new HashSet<>();
                for (Integer i : arr) {
                    list.add(i);
                }
    //重复数字为:
                System.out.println("重复的值为 : " + list);
            }
    
        }
  • 相关阅读:
    数据库锁机制
    spring的事务传播行为与隔离级别
    Logback+ELK+SpringMVC搭建日志收集服务器
    提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
    有状态的bean和无状态的bean的区别
    浅谈Spring解决循环依赖的三种方式
    某类继承thread,同时实现runnable
    java动态代理
    缓存一致性
    Elasticsearch系列(一)--入门
  • 原文地址:https://www.cnblogs.com/strong-FE/p/11470065.html
Copyright © 2011-2022 走看看