Java每日一练(20230516) 最小栈、组合总和II、相同的树

news2024/11/23 11:26:15

目录

1. 最小栈  🌟

2. 组合总和 II  🌟🌟

3. 相同的树  🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 最小栈

设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。

  • push(x) —— 将元素 x 推入栈中。
  • pop() —— 删除栈顶的元素。
  • top() —— 获取栈顶元素。
  • getMin() —— 检索栈中的最小元素。

示例:

输入:
["MinStack","push","push","push","getMin","pop","top","getMin"]
[[],[-2],[0],[-3],[],[],[],[]]

输出: [null,null,null,null,-3,null,0,-2]

解释: MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> 返回 -3. minStack.pop(); minStack.top(); --> 返回 0. minStack.getMin(); --> 返回 -2.

提示:

  • poptop 和 getMin 操作总是在 非空栈 上调用。

出处:

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

代码:

class MinStack {
    Stack<Integer> data_stack;
    Stack<Integer> min_stack;
    /** initialize your data structure here. */
    public MinStack() {
        data_stack = new Stack<Integer>();
        min_stack = new Stack<Integer>();
    }
    public void push(int x) {
        data_stack.push(x);
        if (min_stack.isEmpty()) {
            min_stack.push(x);
        } else {
            if (x > min_stack.peek()) {
                x = min_stack.peek();
            }
            min_stack.push(x);
        }
    }
    public void pop() {
        data_stack.pop();
        min_stack.pop();
    }
    public int top() {
        return data_stack.peek();
    }
    public int getMin() {
        return min_stack.peek();
    }
}
/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.getMin();
 */

输出:


2. 组合总和 II

给定一个数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。

candidates 中的每个数字在每个组合中只能使用一次。

说明:

  • 所有数字(包括目标数)都是正整数。
  • 解集不能包含重复的组合。 

示例 1:

输入: candidates = [10,1,2,7,6,1,5], target = 8,
所求解集为:[[1, 7],[1, 2, 5],[2, 6],[1, 1, 6]]

示例 2:

输入: candidates = [2,5,2,1,2], target = 5,
所求解集为:[[1,2,2],[5]]

出处:

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

代码:

import java.util.*;
public class Solution {
    public static List<List<Integer>> combinationSum2(int[] candidates, int target) {
        Arrays.sort(candidates);
        List<List<Integer>> res = new ArrayList<List<Integer>>();
        if (candidates.length == 0 || target < candidates[0])
            return res;
        List<Integer> tmp = new ArrayList<Integer>();
        helper(candidates, target, 0, tmp, res);
        return res;
    }
    public static void helper(int[] a, int target, int start, List<Integer> tmp, List<List<Integer>> res) {
        if (target < 0)
            return;
        if (target == 0) {
            res.add(new ArrayList<Integer>(tmp));
            return;
        }
        for (int i = start; i < a.length; i++) {
            tmp.add(a[i]);
            int newtarget = target - a[i];
            helper(a, newtarget, i + 1, tmp, res);
            tmp.remove(tmp.size() - 1);
            if (newtarget <= 0)
                break;
            while (i + 1 < a.length && a[i] == a[i + 1])// 组合中有重复元素,不要重复开头
                i++;
        }
    }
    public static void main(String[] args) {
        int[] candidates = {10,1,2,7,6,1,5};
        System.out.println(combinationSum2(candidates, 8));
        int[] candidates2 = {2,5,2,1,2};
        System.out.println(combinationSum2(candidates2, 5));
    }
}

输出:

[[1, 1, 6], [1, 2, 5], [1, 7], [2, 6]]
[[1, 2, 2], [5]]


3. 相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

提示:

  • 两棵树上的节点数目都在范围 [0, 100] 内
  • -10^4 <= Node.val <= 10^4

出处:

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

代码:

import java.util.*;
import java.util.LinkedList;
public class Solution {
    public final static int NULL = Integer.MIN_VALUE; //用NULL来表示空节点
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode() {
        }
        TreeNode(int val) {
            this.val = val;
        }
        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    public static boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        }
        if (p != null && q != null && p.val == q.val) {
            return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
        } else {
            return false;
        }
    }
    public static TreeNode createBinaryTree(Integer[] nums) {
        Vector<Integer> vec = new Vector<Integer>(Arrays.asList(nums));
        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 main(String[] args) {
        Integer[] np1 = {1,2,3};
        Integer[] nq1 = {1,2,3};
        TreeNode p = createBinaryTree(np1);
        TreeNode q = createBinaryTree(nq1);
        System.out.println(isSameTree(p, q));
        Integer[] np2 = {1,2};
        Integer[] nq2 = {1,NULL,2};
        p = createBinaryTree(np2);
        q = createBinaryTree(nq2);
        System.out.println(isSameTree(p, q));
        Integer[] np3 = {1,2,1};
        Integer[] nq3 = {1,1,2};
        p = createBinaryTree(np3);
        q = createBinaryTree(nq3);
        System.out.println(isSameTree(p, q));
    }
}

输出:

true
false
false


🌟 每日一练刷题专栏 🌟

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

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

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

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

 主页:https://hannyang.blog.csdn.net/ 

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/530810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[入门必看]数据结构5.4:树、森林

[入门必看]数据结构5.4&#xff1a;树、森林 第五章 树与二叉树5.4 树、森林知识总览5.4.1 树的存储结构5.4.2 树、森林与二叉树的转化5.4.3 树和森林的遍历 5.4.1 树的存储结构树的逻辑结构回顾&#xff1a;二叉树的顺序存储如何实现树的顺序存储&#xff1f;树的存储1&#x…

【连续介质力学】张量的范数、各向同性和各向异性张量、同轴张量和极分解

张量的范数 张量的大小&#xff0c;使用Frobenius 范数&#xff1a; ∣ ∣ v ⃗ ∣ ∣ v ⃗ ⋅ v ⃗ v i v i &#xff08;向量&#xff09; ||\vec v|| \sqrt{\vec v \cdot \vec v} \sqrt{v_iv_i} &#xff08;向量&#xff09; ∣∣v ∣∣v ⋅v ​vi​vi​ ​&#xff…

okhttp篇2:Dispatcher

Dispatchers维护着一个线程池&#xff0c;3个双端队列&#xff0c;准备执行的AsynCall&#xff0c;正在执行的AsynCall&#xff0c;正在执行的同步Call&#xff08;RealCall&#xff09;。 同时规定每个Host最多同时请求5个Request&#xff0c;同时可最多执行64个Request。 p…

玩转Google开源C++单元测试框架Google Test系列(gtest)之一 - 初识gtest

一、前言 本篇将介绍一些gtest的基本使用&#xff0c;包括下载&#xff0c;安装&#xff0c;编译&#xff0c;建立我们第一个测试Demo工程&#xff0c;以及编写一个最简单的测试案例。 二、下载 如果不记得网址&#xff0c; 直接在google里搜gtest&#xff0c;第一个就是。目…

Docker下Gitlab配置Let’s Encrypt证书

Docker下Gitlab配置Let’s Encrypt证书 1 参考文档2 常见问题2.1 前置条件2.2 不支持ip2.3 重复签发2.4 外网无法访问 ※3 内网穿透配置&#xff08;可选&#xff09;4 Gitlab 创建并配置Let’s Encrypt证书4.1 开放Let’s Encrypt签发所需端口4.2 新增存储HTTPS证书文件夹4.3 …

多态与虚函数(补)

多态与虚函数&#xff08;补&#xff09; 静态联编与动态联编的深层次理解多态底层原理 示例示例一示例二示例三示例四 对象与内存虚析构函数构造函数为什么不能是虚函数&#xff1f; 静态联编与动态联编的深层次理解 我们首先看下面一段代码 class object { private: int va…

C learning_12 操作符前篇(算术操作符、移位操作符、位操作符、赋值操作符、单目操作符、关系操作符、逻辑操作符)

目录 算术操作符 移位操作符 移位规则 位操作符 交换两个整形变量的写法 赋值操作符 单目操作符 sizeof和数组的纠缠 和--运算符 多组输入的方案 关系操作符 逻辑操作符 算术操作符 -- 加法操作符&#xff08;&#xff09;&#xff1a;用于将两个值相加。 -- 减法操…

Python爬虫(二):Requests库

所谓爬虫就是模拟客户端发送网络请求&#xff0c;获取网络响应&#xff0c;并按照一定的规则解析获取的数据并保存的程序。要说 Python 的爬虫必然绕不过 Requests 库。 1 简介 对于 Requests 库&#xff0c;官方文档是这么说的&#xff1a; Requests 唯一的一个非转基因的 P…

存储知识点:RAID0、RAID1、RAID5、RAID10特点是什么?所需的硬盘数量分别为多少?

RAID&#xff08;Redundant Array of Independent Disks&#xff09;是一种将多个独立的硬盘组合成一个逻辑磁盘的技术&#xff0c;目的是提高性能或容错能力。RAID有不同的级别&#xff0c;常见的有RAID0、RAID1、RAID5、RAID10等。下面我们来介绍这些级别的特点和所需的硬盘数…

套接字编程简介

作者&#xff1a;V7 博客&#xff1a;https://www.jvmstack.cn 一碗鸡汤 少年辛苦终身事&#xff0c;莫向光阴惰寸功。 —— 杜荀鹤 Socket概述 在计算机中产生和接受IO流的数据源是多种多样的&#xff0c;在网络编程中&#xff0c;有一个特殊的数据源就是socket。通俗点soc…

linux的系统日志

目录 一、日志文件的产生 二、日志文件存放在哪儿 &#xff08;1&#xff09;文本日志 &#xff08;2&#xff09;二进制日志 三、日志存放规则的配置文件 四、日志轮转 五、分析和监控日志 一、日志文件的产生 日志内容&#xff1a;内核、开机引导、守护进程启动运行的…

华为和思科两种常见的网络设备如何进行ospf配置?

概述 ospf&#xff08;开放最短路径优先&#xff09;是一种基于链路状态的动态路由协议&#xff0c;它可以在网络中自动发现和维护最优的路由路径。ospf广泛应用于大型和复杂的网络环境&#xff0c;因为它具有以下优点&#xff1a; 支持分层路由&#xff0c;可以将网络划分为…

WebAssembly黑暗的一面

案例1&#xff1a;技术支持诈骗 什么是技术支持诈骗&#xff1f; 技术支持诈骗是一种电话欺诈&#xff0c;其中诈骗者声称可以提供合法的技术支持服务。该骗局可能以陌生电话开始&#xff0c;骗子通常会声称来自合法的第三方的员工&#xff0c;如“微软”或“Windows部门”。他…

YOLOv5实现目标分类计数并显示在图像上

有同学后台私信我&#xff0c;想用YOLOv5实现目标的分类计数&#xff0c;因此本文将在之前目标计数博客的基础上添加一些代码&#xff0c;实现分类计数。阅读本文前请先看那篇博客&#xff0c;链接如下&#xff1a; YOLOv5实现目标计数_Albert_yeager的博客 1. 分类实现 以co…

web 实验一 HTML基本标签实验

实验原理 通过创建HTML5网页&#xff0c;验证form内多种元素标签及其属性的作用及意义。 实验目的 理解并掌握Form表单提交必须声明的内容 理解并掌握Input元素中多种类型属性的使用方法及使用场景 理解并掌握Label元素的使用方法 理解并掌握Datalist元素的使用方法 理解并掌握…

软件测试学习——笔记一

一、软件和软件测试 1、软件和软件分类 &#xff08;1&#xff09;软件&#xff1a;程序、数据、文档——用户手册 &#xff08;2&#xff09;软件的分类 按层次划分&#xff1a;系统软件、应用软件按组织划分&#xff1a;开源软件&#xff08;代码公开&#xff09;、商业软…

RSA 加密算法在C++中的实现 面向初学者(附代码)

概述 博文的一&#xff0c;二部分为基础知识的铺垫。分别从密码学&#xff0c;数论两个方面为理解RSA算法做好了准备。第三部分是对RSA加密过程的具体介绍&#xff0c;主要涉及其密钥对&#xff08;key-pair&#xff09;的获取。前三个部分与编程实践无关&#xff0c;可以当作…

C# | 内存池

内存池 文章目录 内存池前言什么是内存池内存池的优点内存池的缺点 实现思路示例代码结束语 前言 在上一篇文章中&#xff0c;我们介绍了对象池的概念和实现方式。对象池通过重复利用对象&#xff0c;避免了频繁地创建和销毁对象&#xff0c;提高了系统的性能和稳定性。 今天我…

你真的了解索引吗

当我们学习存储算法和索引算法时&#xff0c;他们可以深入了解如何在系统中存储和查询数据。因为存储和查询数据是许多系统的核心功能之一&#xff0c;例如数据库、搜索引擎等。理解这些算法可以帮助程序员更好地设计和优化系统架构&#xff0c;提高系统的可扩展性、可用性和性…

玩转Google开源C++单元测试框架Google Test系列(gtest)之二 - 断言

一、前言 这篇文章主要总结gtest中的所有断言相关的宏。 gtest中&#xff0c;断言的宏可以理解为分为两类&#xff0c;一类是ASSERT系列&#xff0c;一类是EXPECT系列。一个直观的解释就是&#xff1a; 1. ASSERT_* 系列的断言&#xff0c;当检查点失败时&#xff0c;退出当前…