CSDN每日一题学习训练——Java版(对给定的两个日期之间的日期进行遍历、子集 II、填充每个节点的下一个右侧节点指针)

版本说明

当前版本号[20231107]。

版本修改说明
20231107初版

目录

文章目录

  • 版本说明
  • 目录
  • 对给定的两个日期之间的日期进行遍历
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • 子集 II
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码
  • 填充每个节点的下一个右侧节点指针
    • 题目
    • 解题思路
    • 代码思路
    • 参考代码

对给定的两个日期之间的日期进行遍历

题目

​ 对给定的两个日期之间的日期进行遍历,比如startTime 是 2014-07-11;endTime 是 2014-08-11 如何把他们之间的日期获取并遍历出来。

解题思路

  1. 首先,我们需要将给定的两个日期字符串转换为Date对象。可以使用SimpleDateFormat类来实现这个功能。
  2. 然后,我们需要创建一个循环来遍历这两个日期之间的所有日期。我们可以使用一个while循环,每次迭代时将当前日期加一天,直到达到结束日期。
  3. 在循环中,我们可以打印出当前日期,或者将其添加到一个列表中以便后续处理。

代码思路

  1. 定义一个名为SplitTime的公共类。

  2. 在SplitTime类中定义一个静态方法dateSplit,该方法接受两个参数:startDate和endDate,返回一个Date类型的列表

        private static List<Date> dateSplit(Date startDate, Date endDate) throws Exception {…… }
    
  3. dateSplit方法中,首先判断startDate是否在endDate之前,如果不是,就不符合题意了,则抛出异常。

     // 判断开始时间是否在结束时间之后,如果不是则抛出异常if (!startDate.before(endDate))throw new Exception("开始时间应该在结束时间之后");
    
  4. 计算startDate和endDate之间的时间差(以毫秒为单位),并将其除以一天的毫秒数(24 * 60 * 60 * 1000)得到步长step。

    // 计算两个日期之间的毫秒数差值Long spi = endDate.getTime() - startDate.getTime();// 计算需要分割的天数Long step = spi / (24 * 60 * 60 * 1000);
    
  5. 创建一个空的Date类型的列表dateList。

         // 创建一个空的日期列表List<Date> dateList = new ArrayList<Date>();
    
  6. endDate添加到dateList中。

       // 将结束日期添加到列表中dateList.add(endDate);
    
  7. 使用for循环进行输出每一天的日期,从1到step,每次循环都将上一个日期减去一天的毫秒数,然后将结果添加到dateList中。

     // 循环分割日期,并将分割后的日期添加到列表中for (int i = 1; i <= step; i++) {dateList.add(new Date(dateList.get(i - 1).getTime() - (24 * 60 * 60 * 1000)));}
    
  8. 返回dateList。

       // 返回分割后的日期列表return dateList;
    
  9. 在main方法中,创建一个SimpleDateFormat对象sdf,用于解析和格式化日期

     // 创建一个日期格式化对象SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    
  10. 使用sdf解析开始日期和结束日期,得到start和end。

      // 解析开始日期和结束日期Date start = sdf.parse("2015-4-20");Date end = sdf.parse("2015-5-2");
    
  11. 调用dateSplit方法,传入start和end,得到分割后的日期列表lists。

      // 调用dateSplit方法,获取分割后的日期列表List<Date> lists = dateSplit(start, end);
    
  12. 如果lists不为空,则遍历lists,打印每个日期。

     // 判断列表是否为空,如果不为空则遍历并打印每个日期if (!lists.isEmpty()) {for (Date date : lists) {System.out.println(sdf.format(date));}}
    
  13. 如果在执行过程中发生异常,捕获并忽略。

catch (Exception e) {}

参考代码

​ 这段代码首先将给定的日期字符串转换为Date对象,然后使用Calendar类来遍历这两个日期之间的所有日期。在循环中,我们打印出当前日期,并将其添加到一个列表中以便后续处理。

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class SplitTime {private static List<Date> dateSplit(Date startDate, Date endDate) throws Exception {if (!startDate.before(endDate))throw new Exception("开始时间应该在结束时间之后");Long spi = endDate.getTime() - startDate.getTime();Long step = spi / (24 * 60 * 60 * 1000);List<Date> dateList = new ArrayList<Date>();dateList.add(endDate);for (int i = 1; i <= step; i++) {dateList.add(new Date(dateList.get(i - 1).getTime() - (24 * 60 * 60 * 1000)));}return dateList;}public static void main(String[] args) throws ParseException {try {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Date start = sdf.parse("2015-4-20");Date end = sdf.parse("2015-5-2");List<Date> lists = dateSplit(start, end);if (!lists.isEmpty()) {for (Date date : lists) {System.out.println(sdf.format(date));}}} catch (Exception e) {}}
}

子集 II

题目

给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。

解集 不能 包含重复的子集。返回的解集中,子集可以按 任意顺序 排列。

示例 1:

输入:nums = [1,2,2]
输出:[[],[1],[1,2],[1,2,2],[2],[2,2]]

示例 2:

输入:nums = [0]
输出:[[],[0]]

提示:

  • 1 <= nums.length <= 10
  • -10 <= nums[i] <= 10

解题思路

  1. 首先,我们需要创建一个空的结果列表,用于存储所有可能的子集
  2. 然后,我们使用一个循环来遍历整数数组中的每个元素。对于每个元素,我们可以将其添加到当前子集中,并将其添加到结果列表中。
  3. 在添加元素到当前子集时,我们需要确保不重复添加相同的元素。为了实现这一点,我们可以使用一个集合来存储当前子集中的元素。每次添加元素之前,我们可以检查该元素是否已经在集合中存在。如果存在,则跳过该元素;否则,将其添加到集合和当前子集中。
  4. 在循环结束后,我们将当前子集添加到结果列表中。
  5. 最后,返回结果列表作为最终的解集。

代码思路

  1. 创建一个空的结果列表retList。

            // 创建一个空的结果列表List<List<Integer>> retList = new ArrayList<>();// 添加一个空的子集到结果列表中retList.add(new ArrayList<>());
    
  2. 如果输入数组为空或长度为0,则直接返回结果列表。

     // 如果输入数组为空或长度为0,则直接返回结果列表if (nums == null || nums.length == 0)return retList;
    
  3. 对输入数组进行排序。

            // 对输入数组进行排序Arrays.sort(nums);
    
  4. 创建一个临时列表tmp,用于存储当前正在处理的元素。将第一个元素添加到临时列表中,并将临时列表添加到结果列表中。

    	// 创建一个临时列表,用于存储当前正在处理的元素List<Integer> tmp = new ArrayList<>();// 将第一个元素添加到临时列表中tmp.add(nums[0]);// 将临时列表添加到结果列表中retList.add(tmp);
    
  5. 如果输入数组只有一个元素,则直接返回结果列表。

            // 如果输入数组只有一个元素,则直接返回结果列表if (nums.length == 1)return retList;
    
  6. 初始化变量lastLen,表示上一个子集的长度。

            // 初始化变量 lastLen,表示上一个子集的长度int lastLen = 1;
    
  7. 遍历输入数组中的每个元素(从第二个元素开始)。

    // 遍历输入数组中的每个元素(从第二个元素开始)for (int i = 1; i < nums.length; i++)
    
  8. 获取当前结果列表的大小。

      // 获取当前结果列表的大小int size = retList.size();
    
  9. 如果当前元素与前一个元素不同,则更新lastLen的值。

                // 如果当前元素与前一个元素不同,则更新 lastLen 的值if (nums[i] != nums[i - 1]) {lastLen = size;}
    
  10. 遍历当前结果列表中从lastLen开始的所有子集。

       // 遍历当前结果列表中从 lastLen 开始的所有子集for (int j = size - lastLen; j < size; j++)
    
  11. 创建一个新的子集,并将当前元素添加到该子集中。

          // 创建一个新的子集,并将当前元素添加到该子集中List<Integer> inner = new ArrayList(retList.get(j));inner.add(nums[i]);
    
  12. 将新子集添加到结果列表中。

          // 将新子集添加到结果列表中retList.add(inner);
    
  13. 返回结果列表。

   // 返回结果列表return retList;

参考代码

​ 这段代码是一个Java类,名为Solution。它包含一个名为subsetsWithDup的方法,该方法接受一个整数数组nums作为输入,并返回一个列表,其中包含所有可能的子集(不包含重复)。

class Solution {public List<List<Integer>> subsetsWithDup(int[] nums) {List<List<Integer>> retList = new ArrayList<>();retList.add(new ArrayList<>());if (nums == null || nums.length == 0)return retList;Arrays.sort(nums);List<Integer> tmp = new ArrayList<>();tmp.add(nums[0]);retList.add(tmp);if (nums.length == 1)return retList;int lastLen = 1;for (int i = 1; i < nums.length; i++) {int size = retList.size();if (nums[i] != nums[i - 1]) {lastLen = size;}for (int j = size - lastLen; j < size; j++) {List<Integer> inner = new ArrayList(retList.get(j));inner.add(nums[i]);retList.add(inner);}}return retList;}
}

填充每个节点的下一个右侧节点指针

题目

给定一个 完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。

初始状态下,所有 next 指针都被设置为 NULL。

进阶:

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

image-20231107200815034

示例:

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

提示:

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

解题思路

  1. 首先,我们需要填充完美二叉树的每个节点的next指针,使其指向其右侧的节点。如果当前节点是该层的最后一个节点,则其next指针应设置为NULL
  2. 对于完美二叉树,我们可以使用层次遍历的方法来解决这个问题。具体来说,我们可以使用一个队列来存储每一层的节点。然后,我们从根节点开始,依次处理每一层的节点。对于每一层,我们将当前节点的next指针指向其右侧的节点(如果存在的话)。然后,我们将当前节点的左右子节点添加到队列中,以便在下一轮中处理。
  3. 在处理完一层的所有节点后,我们需要将队列中的节点清空,以便开始处理下一层的节点。
  4. 最后,当队列为空时,说明我们已经处理完了所有的节点,此时返回根节点即可。

代码思路

  1. 定义一个Node类,表示二叉树的节点,包含四个属性:val表示节点的值,left表示左子节点,right表示右子节点,next表示下一个节点。

    class Node {public int val; // 节点的值public Node left; // 左子节点public Node right; // 右子节点public Node next; // 下一个节点
    };
    
  2. 同时定义了三个构造函数,分别用于初始化节点的值、左右子节点和下一个节点

    // 默认构造函数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;}
    
  3. 定义一个Solution类,包含一个connect方法,用于连接二叉树中的节点

    // 定义一个Solution类,包含一个connect方法,用于连接二叉树中的节点
    class Solution {public Node connect(Node root)
    
  4. 首先判断根节点是否为空,如果为空则直接返回。

     // 如果根节点为空,直接返回if (root == null)return root;
    
  5. 然后判断根节点的左子节点是否不为空,如果不为空则将左子节点的next指针指向右子节点

     // 如果根节点的左子节点不为空,将左子节点的next指针指向右子节点if (root.left != null)root.left.next = root.right;
    
  6. 接着判断根节点的右子节点和下一个节点是否都不为空,如果不都为空则将右子节点的next指针指向下一个节点的左子节点

    // 如果根节点的右子节点和下一个节点都不为空,将右子节点的next指针指向下一个节点的左子节点if (root.next != null && root.right != null) {root.right.next = root.next.left;}
    
  7. 最后递归地连接左子树和右子树的节点。

     // 递归地连接左子树和右子树的节点connect(root.left);connect(root.right);
    
  8. 返回连接后的根节点。

  // 返回连接后的根节点return root;

参考代码

这段代码的思路是实现一个二叉树的层次遍历,并将同一层的节点通过next指针连接起来。

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;}
}

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

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

相关文章

Flink架构

1、Apache Flink集群的核心架构&#xff1a; 1、client&#xff08;作业客户端&#xff09;&#xff1a;提交任务的地方叫做客户端 2、JobManager&#xff08;作业管理器&#xff09;&#xff1a;作用是用于管理集群中任务 3、TaskManager&#xff08;任务管理器&#xff09;&a…

WPF布局与控件分类

Refer&#xff1a;WPF从假入门到真的入门 - 知乎 (zhihu.com) Refer&#xff1a;WPF从假入门到真的入门 - 知乎 (zhihu.com) https://www.zhihu.com/column/c_1397867519101755392 https://blog.csdn.net/qq_44034384/article/details/106154954 https://www.cnblogs.com/mq0…

unittest 统计测试执行case总数,成功数量,失败数量,输出至文件,生成一个简易的html报告带饼图

这是一个Python的单元测试框架的示例代码&#xff0c;主要用于执行测试用例并生成测试报告。其中&#xff0c;通过unittest模块创建主测试类MainTestCase&#xff0c;并加载其他文件中的测试用例&#xff0c;统计用例的执行结果并将结果写入文件&#xff0c;最后生成一个简单的…

无人机航迹规划:五种最新智能优化算法(KOA、COA、LSO、GRO、LO)求解无人机路径规划MATLAB

一、五种算法&#xff08;KOA、COA、LSO、GRO、LO&#xff09;简介 1、开普勒优化算法KOA 开普勒优化算法&#xff08;Kepler optimization algorithm&#xff0c;KOA&#xff09;由Mohamed Abdel-Basset等人于2023年提出。五种最新优化算法&#xff08;SWO、ZOA、EVO、KOA、…

【3D 图像分割】基于 Pytorch 的 VNet 3D 图像分割10(测试推理篇)

对于直接将裁剪的patch&#xff0c;一个个的放到训练好的模型中进行预测&#xff0c;这部分代码可以直接参考前面的训练部分就行了。其实说白了&#xff0c;就是验证部分。不使用dataloader的方法&#xff0c;也只需要修改少部分代码即可。 但是&#xff0c;这种方法是不end t…

Intel oneAPI笔记(4)--jupyter官方文档(Unified Shared Memory)学习笔记

前言 本文是对jupyterlab中oneAPI_Essentials/03_Unified_Shared_Memory文档的学习记录&#xff0c;主要包含对统一共享内存的讲解 USM概述 USM (Unified Shared Memory)是SYCL中基于指针的内存管理。对于使用malloc或new来分配数据的C和C程序员来说应该很熟悉。当将现有的C…

关于卷积神经网络的填充(padding)

认识填充 &#xff08;padding&#xff09; 随着卷积层数的加深&#xff0c;输出进一步缩小&#xff0c;那么最终会导致输出很快就只剩下1∗1的数组&#xff0c;这也就没办法继续计算了&#xff0c;所以提出了填充的方法来方便网络的进一步加深。 其实填充的原因有两点&#xf…

MapReduce:大数据处理的范式

一、介绍 在当今的数字时代&#xff0c;生成和收集的数据量正以前所未有的速度增长。这种数据的爆炸式增长催生了大数据领域&#xff0c;传统的数据处理方法往往不足。MapReduce是一个编程模型和相关框架&#xff0c;已成为应对大数据处理挑战的强大解决方案。本文探讨了MapRed…

ESP32 未来能够取代 STM32吗?

今日话题&#xff0c;ESP32 未来能够取代 STM32吗&#xff1f;ESP32和STM32各自有其特点和优势&#xff0c;能否取代彼此取决于具体应用和需求。STM32的流行除了性价比外&#xff0c;还有其强大的开发环境&#xff0c;例如Cubemx能够快速生成代码&#xff0c;使得上手STM32的速…

解决 win11 vmware 中centos 网络不能访问外网

解决 win11 vmware 中centos 网络不能访问外网 1、进入win11 高级设置&#xff0c;找到centos 虚拟机使用的网卡 2、看网卡的其他属性 3、按照红圈部分&#xff0c;配置成一样的就行 4、进入到虚拟机配置中&#xff0c;配置成如图一样的NAT模式 5、再进入编辑 -》虚拟网络编辑…

基于CLIP的图像分类、语义分割和目标检测

OpenAI CLIP模型是一个创造性的突破&#xff1b; 它以与文本相同的方式处理图像。 令人惊讶的是&#xff0c;如果进行大规模训练&#xff0c;效果非常好。 在线工具推荐&#xff1a; Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 3D…

vue中插槽slot

一、插槽-默认插槽 1.作用 让组件内部的一些 结构 支持 自定义 2.需求 将需要多次显示的对话框,封装成一个组件 3.问题 组件的内容部分&#xff0c;不希望写死&#xff0c;希望能使用的时候自定义。怎么办 4.插槽的基本语法 组件内需要定制的结构部分&#xff0c;改用&l…

AUTOSAR Gateway 功能

目录 AUTOSAR Gateway 功能1. Signal/SignalGroup 路由1.1 Signal/SignalGroup 路由的配置 2. PDU部分路由2.1 部分路由配置 3. PDU整体路由4. 总结 AUTOSAR Gateway 功能 Com 模块提供Signal 到Signal 的静态路由&#xff0c;或者SigGrp 到SigGrp的静态路由。通过ComGwMappin…

【VSS版本控制工具】

VSS版本控制工具 1 安装 VSS2 服务器端配置3 新建用户4 客户端配置Vss2005Vs20055 客户端详细操作 1 安装 VSS 第一步&#xff1a;将VisualSourceSafe2005安装包解压。 第二步&#xff1a;找到setup.exe双击运行。 第三步&#xff1a;在弹出的界面复选框中选中Iaccepttheterms…

小程序如何设置自取模式下的服务方式

设置自取模式下的服务方式是非常重要的&#xff0c;尤其是对于到店自取和到店堂食这两种不同的服务模式。下面我们就来介绍一下如何在小程序中设置这两种服务方式。 在小程序管理员后台->配送设置处&#xff0c;在服务方式处&#xff0c;设置自取情况下的服务方式。默认是&…

046_第三代软件开发-虚拟屏幕键盘

第三代软件开发-虚拟屏幕键盘 文章目录 第三代软件开发-虚拟屏幕键盘项目介绍虚拟屏幕键盘 关键字&#xff1a; Qt、 Qml、 虚拟键盘、 qtvirtualkeyboard、 自定义 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object L…

Scala语言使用Selenium库编写网络爬虫

目录 一、引言 二、环境准备 三、爬虫程序设计 1、导入必要的库和包 2、启动浏览器驱动程序 3、抓取网页内容 4. 提取特定信息 5. 数据存储和处理 四、优化和扩展 五、结语 一、引言 网络爬虫是一种自动抓取互联网信息的程序。它们按照一定的规则和算法&#xff0c;…

SQL Server SSIS的安装

标题SQL SERVER 安装 下载SQL SERVER数据库&#xff1a;&#xff08;以SQL SERVER 2022 Developer版本&#xff09;(https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads?rtc1) 以administrator权限安装&#xff1a; 下载完成后&#xff0c;会出现以下界面&a…

使用腾讯云轻量服务器安装AList

新人有免费两个月试用轻量服务器&#xff0c;使用云服务器商自带的webshell登录&#xff1b; 我这儿用docker安装Alist&#xff0c;因为服务器没自带docker&#xff0c;所以具体安装docker centos7.0最快速安装docker的方法 通过 Docker 部署 Alist 命令&#xff1a; docke…

GPT-4 Turbo:OpenAI发布旗舰版GPT-4模型,更便宜|更强大|128K上下文|支持多模态

一、介绍 OpenAI 在 2023 年 11 月 7 日举行首届开发者大会&#xff0c;此次展会的亮点无疑是 GPT-4 Turbo 的亮相&#xff0c;它是 OpenAI 著名的 GPT-4 模型的升级版。 GPT-4 Turbo 有两种变体&#xff1a;一种用于文本分析&#xff0c;另一种能够理解文本和图像。 GPT-4 Tu…