按要求编写字符界面(算法初阶最小值和最大值)填充每个节点的下一个右侧节点指针(树深度优先搜索)最大矩形(栈数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按要求编写字符界面(算法初阶最小值和最大值)填充每个节点的下一个右侧节点指针(树深度优先搜索)最大矩形(栈数组)相关的知识,希望对你有一定的参考价值。

按要求编写字符界面(算法初阶、最小值和最大值)

编写一个字符界面的Java Application 程序,接受用户输入的10个整数,并输出这10个整数的最大值和最小值。

import java.util.Scanner;
public class MaxMin 
    public static void main(String[] args) 
        Arrays array = new Arrays();
        array.setArr();
        int max=array.getMax();
        int min=array.getMin();
        System.out.println("数组中最大值="+max);
        System.out.println("数组中最小值="+min);
    

class Arrays 
    private int[] arr;
    public Arrays() 
        arr = new int[10] ;
        for(int i = 0; i<arr.length;i++) 
            arr[i] =0;
        
    
    public void setArr() 
        Scanner sc = new Scanner(System.in);  
        System.out.println("请输入数组元素的值:");  
        arr = new int[10] ;
        for(int i = 0; i<arr.length;i++) 
            arr[i] = sc.nextInt();
        
    
    public int getMax() 
        int max = arr[0];
        for(int i : arr) 
            if(max < i)
                max = i;
        
        return max; 
    
    public int getMin() 
        int min= arr[0];
        for(int i : arr) 
            if(min > i)
                min= i;
        
        return min; 
    

填充每个节点的下一个右侧节点指针(树、深度优先搜索)

给定一个 **完美二叉树 **,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: struct Node int val; Node *left; Node *right; Node *next; 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。

进阶:

  • 你只能使用常量级额外空间。
  • 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间复杂度。

示例: 输入:root = [1,2,3,4,5,6,7] 输出:[1,#,2,3,#,4,5,6,7,#] 解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,# 标志着每一层的结束。

提示:

  • 树中节点的数量少于 4096
  • -1000 <= node.val <= 1000

解答:

class Node 
    public int val;
    public Node left;
    public Node right;
    public Node next;
    public Node() 
    
    public Node(int _val) 
        val = _val;
    
    public Node(int _val, Node _left, Node _right, Node _next) 
        val = _val;
        left = _left;
        right = _right;
        next = _next;
    
;
class Solution 
    public Node connect(Node root) 
        if (root == null)
            return root;
        if (root.left != null)
            root.left.next = root.right;
        if (root.next != null && root.right != null) 
            root.right.next = root.next.left;
        
        connect(root.left);
        connect(root.right);
        return root;
    

最大矩形(栈、数组)

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

示例 1:

输入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
输出:6
解释:最大矩形如上图所示。

示例 2:

输入:matrix = []
输出:0

示例 3:

输入:matrix = [["0"]]
输出:0

示例 4:

输入:matrix = [["1"]]
输出:1

示例 5:

输入:matrix = [["0","0"]]
输出:0

提示:

  • rows == matrix.length
  • cols == matrix[0].length
  • 0 <= row, cols <= 200
  • matrix[i][j] 为 0 或 1

以下程序实现了这一功能,请你填补空白处内容:

class Solution 
	public int maximalRectangle(char[][] matrix) 
		if (matrix == null || matrix.length == 0)
			return 0;
		int m = matrix.length;
		int n = matrix[0].length;
		int[] left = new int[n];
		int[] right = new int[n];
		int[] height = new int[n];
		Arrays.fill(right, n);
		int cur_left = 0;
		int cur_right = n;
		int res = 0;
		for (int i = 0; i < m; i++) 
			cur_left = 0;
			cur_right = n;
			for (int j = 0; j < n; j++) 
				if (matrix[i][j] == 1)
					height[j]++;
				else
					height[j] = 0;
			
			for (int j = 0; j < n; j++) 
				if (matrix[i][j] == 1) 
					left[j] = Math.max(left[j], cur_left);
				 else 
					left[j] = 0;
					cur_left = j + 1;
				
			
			for (int j = n - 1; j >= 0; j--) 
				if (matrix[i][j] == 1) 
					right[j] = Math.min(right[j], cur_right);
				 else 
					right[j] = n;
					cur_right = j;
				
			
			______________________;
		
		return res;
	

解答:

for (int j = 0; j < n; j++)
	res = Math.max(res, (right[j] - left[j]) * height[j]);

以上是关于按要求编写字符界面(算法初阶最小值和最大值)填充每个节点的下一个右侧节点指针(树深度优先搜索)最大矩形(栈数组)的主要内容,如果未能解决你的问题,请参考以下文章

如何在文件处理中从文本文件中找到每一行的最小值和最大值?

跨字段选择最小值和最大值并按用户聚合

pandas 选择每列的最小值和最大值并创建一个新的数据框

R中具有数据框的每一行的最小值和最大值

使用文本标记最小和最大刻度填充渐变图例:ggplot2

仅当高于 0 时才计算每列的最小值和最大值之间的差异