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

news/2024/11/29 3:41:06/

目录

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.ppmy.cn/news/68914.html

相关文章

CPU的功能和组成

CPU的功能和组成 CPU是控制计算机自动完成取指令和执行指令任务的部件&#xff0c;是计算机的核心部件、简称CPU 功能&#xff1a; 指令控制&#xff1a;对程序的顺序控制也是对指令执行的顺序控制&#xff08;PC、JMP&#xff09;操作控制&#xff1a;产生各种操作信号&…

【软件工程】为什么要选择软件工程专业?

个人主页&#xff1a;【&#x1f60a;个人主页】 文章目录 前言软件工程&#x1f4bb;&#x1f4bb;&#x1f4bb;就业岗位&#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f4bb;&#x1f468;‍&#x1f4bb;就业前景&#x1f6e9;️&#x1f6e9;️&#x1f6e9;️工作环…

java工程构建时带上分支,commit等信息

背景&#xff1a; 线上部署的jar包&#xff08;不管是直接运行jar包&#xff0c;还是通过容器运行的jar&#xff09;有时出现问题时需要查看源代码&#xff0c;需要知道该jar包是从哪个分支、哪个commit、哪个时间打包的。 有了这些信息能更好辅助我们分析判断问题。 这里以gr…

Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式(C++)(Mono)

Baumer工业相机堡盟工业相机使用BGAPI SDK将图像数据转换为Bitmap的几种方式&#xff08;C&#xff09; Baumer工业相机Baumer工业相机图像数据转为Bitmap的技术背景Baumer工业相机使用BGAPISDK将图像数据转换为Bitmap的几种方式1.引用合适的类文件2.BGAPI SDK原始图像数据为Bi…

docker安装mysql并修改远程登陆权限

一、docker 安装 启动容器 sudo docker start 831316f3ca61查看容器 sudo docker ps -a进入容器 sudo doker exec -it cf49e8f51a31 /bin/bash删除容器 sudo docker rm 831316f3ca61根据Dockerfile 创建镜像 sudo docker build -t solidifi .运行某个容器 sudo docker run -it…

边缘计算的挑战与未来:探索物联网、自动驾驶和智能城市的边缘计算应用

随着移动互联网、物联网和5G技术的发展&#xff0c;边缘计算正在成为一种重要的计算范式&#xff0c;越来越多的企业和组织开始将其应用于实际业务中。边缘计算旨在将计算和数据存储推向离用户更近的边缘设备&#xff0c;以提高响应速度、降低成本和提高用户体验。在本次研讨会…

【Swift】Swift和Objective-c混编

1.介绍 Swift和Objective-C都是苹果公司的编程语言&#xff0c;它们可以在同一个项目中同时使用。这种混编方式被称为“混合编程”&#xff08;Mixed Programming&#xff09;。 在混合编程时&#xff0c;我们需要用到一个桥接文件&#xff08;Bridging Header&#xff09;&a…

Blender渲染分辨率如何优化设置?这些渲染技巧你要知道!

尽管 Blender不断改进其功能&#xff0c;随着硬件的不断进步而变得越来越复杂&#xff0c;该软件最好的是允许很多人免费试用它。但即使所有人都可以访问&#xff0c;这并不意味着Blender可以克服低端GPU的局限性。 并非所有PC都是平等的&#xff0c;也不是每个3D设计师都可以使…