Java每日一练(20230406)

这篇具有很好参考价值的文章主要介绍了Java每日一练(20230406)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Java每日一练(20230406)

目录

1. 翻转二叉树  🌟

2. 接雨水  🌟🌟

3. 求平均值、最大值  ※

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 翻转二叉树

翻转一棵二叉树。

示例:

输入:

     4
   /   \
  2     7
 / \   / \
1   3 6   9

输出:

     4
   /   \
  7     2
 / \   / \
9   6 3   1

出处:

https://edu.csdn.net/practice/24851844

代码:

import java.util.Arrays;
import java.util.Vector;
import java.util.Queue;
import java.util.LinkedList;
public class invertTree {
    public final static int NULL = Integer.MIN_VALUE; //用NULL来表示空节点
    public static void main(String[] args) {
        Integer[] arr = {4,2,7,1,NULL,6,9}; 
        Vector<Integer> vec = new Vector<Integer>(Arrays.asList(arr));
        TreeNode root = createBinaryTree(vec);
        printTree(root);
        Solution s = new Solution();
        s.invertTree(root);
        printTree(root);
    }
    public static class Solution {
        public TreeNode invertTree(TreeNode root) {
            if (root == null)
                return null;
            Queue<TreeNode> queue = new LinkedList<>();
            queue.offer(root);
            while (!queue.isEmpty()) {
                TreeNode node = queue.poll();
                TreeNode rightTree = node.right;
                node.right = node.left;
                node.left = rightTree;
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            return root;
        }
    }
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }
    public static TreeNode createBinaryTree(Vector<Integer> vec) {
        if (vec == null || vec.size() == 0) {
            return null;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        TreeNode root = new TreeNode(vec.get(0));
        queue.offer(root);
        int i = 1;
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int j = 0; j < size; j++) {
                TreeNode node = queue.poll();
                if (i < vec.size() && vec.get(i) != NULL) {
                    node.left = new TreeNode(vec.get(i));
                    queue.offer(node.left);
                }
                i++;
                if (i < vec.size() && vec.get(i) != NULL) {
                    node.right = new TreeNode(vec.get(i));
                    queue.offer(node.right);
                }
                i++;
            }
        }
        return root;
    }
    public static void printTree(TreeNode root) {
        if (root == null) {
            return;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        while (!queue.isEmpty()) {
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                if (node != null) {
                    System.out.print(node.val + " ");
                    if (node.left != null || node.right != null) {
                        queue.offer(node.left);
                        queue.offer(node.right);
                    }
                } else {
                    System.out.print("null ");
                }
            }
            System.out.println();
        }
    }
}

输出:


2 7 
1 null 6 9 

7 2 
9 6 null 1 


2. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例 1:

Java每日一练(20230406)

输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]
输出:6
解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示:

  • n == height.length
  • 0 <= n <= 3 * 10^4
  • 0 <= height[i] <= 10^5

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

```Java
    public int trap(int[] height) {
        if (height == null)
            return 0;
        int len = height.length;
        if (len == 0)
            return 0;
        int res = 0;
        int[] left_max = new int[len];
        int[] right_max = new int[len];
        left_max[0] = height[0];
        for (int i = 1; i < len; i++) {
            left_max[i] = Math.max(height[i], left_max[i - 1]);
        }
        right_max[len - 1] = height[len - 1];
        __________________;
        for (int i = 1; i < len - 1; i++) {
            res += Math.min(left_max[i], right_max[i]) - height[i];
        }
        return res;
    }
```

出处:

https://edu.csdn.net/practice/24851845

代码:

public class trap {
    public static class Solution {
        public int trap(int[] height) {
            if (height == null)
                return 0;
            int len = height.length;
            if (len == 0)
                return 0;
            int res = 0;
            int[] left_max = new int[len];
            int[] right_max = new int[len];
            left_max[0] = height[0];
            for (int i = 1; i < len; i++) {
                left_max[i] = Math.max(height[i], left_max[i - 1]);
            }
            right_max[len - 1] = height[len - 1];
            for (int i = len - 2; i >= 0; i--) {
                right_max[i] = Math.max(height[i], right_max[i + 1]);
            }
            for (int i = 1; i < len - 1; i++) {
                res += Math.min(left_max[i], right_max[i]) - height[i];
            }
            return res;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] height = {0,1,0,2,1,0,1,3,2,1,2,1}; 
        System.out.println(s.trap(height));

        int[] height2 = {4,2,0,3,2,5};
        System.out.println(s.trap(height2));
    }
}

输出:

6
9

代码2:

单调栈:遍历每个位置时,将该位置的高度和下标入栈,如果当前位置的高度小于栈顶位置的高度,则将当前位置入栈,否则弹出栈顶位置,计算出当前位置和栈顶位置之间的水的高度,然后继续比较栈顶位置和当前位置的高度,直到栈为空或当前位置的高度小于栈顶位置的高度。 

import java.util.Stack;
public class trap {
    public static class Solution {
        public int trap(int[] height) {
            if (height == null)
                return 0;
            int len = height.length;
            if (len == 0)
                return 0;
            int res = 0;
            Stack<Integer> stack = new Stack<>();
            for (int i = 0; i < len; i++) {
                while (!stack.isEmpty() && height[i] > height[stack.peek()]) {
                    int top = stack.pop();
                    if (stack.isEmpty())
                        break;
                    int left = stack.peek();
                    int width = i - left - 1;
                    int h = Math.min(height[left], height[i]) - height[top];
                    res += width * h;
                }
                stack.push(i);
            }
            return res;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] height = {0,1,0,2,1,0,1,3,2,1,2,1}; 
        System.out.println(s.trap(height));

        int[] height2 = {4,2,0,3,2,5};
        System.out.println(s.trap(height2));
    }
}

3. 求平均值、最大值

输入若干个数,设输入的第一个数n为后面要输入的数的个数,求平均值及最大值,并在屏幕输出来

出处:

https://edu.csdn.net/practice/24851846

代码:

import java.util.Scanner;
public class Test{
    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        System.out.println("输入n:");
        int n=in.nextInt();
        int temp,max=0,sum=0;
        for(int i=0;i<n;i++){
            temp=in.nextInt();
            if (temp>max){
                max=temp;
            }
            sum+=temp;
        }
        System.out.println("最大值为:"+max+",平均值为:"+sum*1.0/n);
    }
}

输出:


🌟 每日一练刷题专栏 🌟

持续,努力奋斗做强刷题搬运工!

👍 点赞,你的认可是我坚持的动力! 

🌟 收藏,你的青睐是我努力的方向! 

评论,你的意见是我进步的财富!  

 主页:https://hannyang.blog.csdn.net/ 文章来源地址https://www.toymoban.com/news/detail-405792.html

Java每日一练(20230406)

Golang每日一练 专栏

Java每日一练(20230406)

Python每日一练 专栏

Java每日一练(20230406)

C/C++每日一练 专栏

Java每日一练(20230406)

Java每日一练 专栏

到了这里,关于Java每日一练(20230406)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java每日一练(20230504)

    目录 1. 位1的个数  🌟 2. 移除元素  🌟 3. 验证二叉搜索树  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为

    2024年02月03日
    浏览(25)
  • Java每日一练(20230417) N 皇后、搜索二维矩阵、发奖金问题

    目录 1. N 皇后  🌟🌟🌟 2. 搜索二维矩阵  🌟🌟 3. 发奖金问题 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 n 皇后问题  研究的是如何将  n  个皇后放置在  n×n  的棋盘上,并且使皇后彼此之间不能相互攻

    2024年02月15日
    浏览(32)
  • Java每日一练(20230516) 最小栈、组合总和II、相同的树

    目录 1. 最小栈  🌟 2. 组合总和 II  🌟🌟 3. 相同的树  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 设计一个支持  push  , pop  , top  操作,并能在常数时间内检索到最小元素的栈。 push(x)  —— 将元素 x

    2024年02月05日
    浏览(26)
  • 【Java每日一练】总目录(2023.3.11~5.18)共69篇

    2023.3.11~2023.5.18 连载两个多月共69篇,暂停更 20230518 1. 移除链表元素  🌟 2. 跳跃游戏 II  🌟🌟 3. 复原 IP 地址   🌟🌟 20230517 1. 存在重复元素  🌟 2. 删除排序链表中的重复元素  🌟 3. 旋转数组  🌟🌟 20230516 1. 最小栈  🌟 2. 组合总和 II  🌟🌟 3. 相同的树  🌟

    2024年02月06日
    浏览(25)
  • Java每日一练(20230515) 阶乘后的零、矩阵置零、两数相除

    目录 1. 阶乘后的零  🌟 2. 矩阵置零  🌟🌟 3. 两数相除  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给定一个整数  n  ,返回  n!  结果中尾随零的数量。 提示  n! = n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 示例

    2024年02月05日
    浏览(30)
  • 百题千解计划【CSDN每日一练】“小明投篮,罚球线投球可得一分”(附解析+多种实现方法:Python、Java、C、C++、C#、Go、JavaScript)

      这个心上人,还不知道在哪里,感觉明天就会出现。     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质创作者🏆

    2024年02月15日
    浏览(45)
  • python每日一练(9)

       🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:Aileen_0v0🧸—CSDN博客 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏:Ailee

    2024年02月07日
    浏览(27)
  • Python每日一练(20230420)

    目录 1. 数组逐位判断  🌟 2. 交错字符串  🌟🌟 3. 二进制求和  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 比如有以下数组: a1: 1,0,0,1,0,0,0,1 a2: 0,0,0,0,1,1,1,1 a3: 0,1,0,1,0,1,0,0 a4: 1,0,1,1,1,1,0,0 a5: ....... 抓取三个数

    2023年04月20日
    浏览(27)
  • Python每日一练(20230408)

    目录 1. 两数相除  🌟🌟 2. 分割回文串  🌟🌟 3. x 的平方根  🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给定两个整数,被除数  dividend  和除数  divisor 。将两数相除,要求不使用乘法、除法和 mod 运算符。

    2024年02月02日
    浏览(33)
  • Python每日一练(20230502)

    目录 1. 被围绕的区域  🌟🌟 2. 两数之和 II  🌟 3. 二叉树展开为链表  🌟🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C++每日一练 专栏 Java每日一练 专栏 给你一个  m x n  的矩阵  board  ,由若干字符  \\\'X\\\'  和  \\\'O\\\'  ,找到所有被  \\\'X\\\'  围绕的

    2024年02月02日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包