Java每日一练(20230502)

news2024/7/3 23:22:26

目录

1. 二叉搜索树的最近公共祖先  🌟🌟

2. 随机分组问题  🌟

3. K 个一组翻转链表  🌟🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
输出: 6 
解释: 节点 2 和节点 8 的最近公共祖先是 6。

示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
输出: 2
解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

说明:

  • 所有节点的值都是唯一的。
  • p、q 为不同节点且均存在于给定的二叉搜索树中。

出处:

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

代码:

import java.util.*;
import java.util.LinkedList;
public class lowestCommonAncestor {
    public final static int NULL = Integer.MIN_VALUE; //用NULL来表示空节点
    public static class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) {
            val = x;
        }
    }
    public static class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if (p.val < root.val && q.val < root.val)
                return lowestCommonAncestor(root.left, p, q);
            else if (p.val > root.val && q.val > root.val)
                return lowestCommonAncestor(root.right, p, q);
            else
                return root;
        }
    }
    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 main(String[] args) {
        Solution s = new Solution();
        Integer[] nums = {6,2,8,0,4,7,9,NULL,NULL,3,5};
        Vector<Integer> vec = new Vector<Integer>(Arrays.asList(nums));
        TreeNode root = createBinaryTree(vec);
        TreeNode p = new TreeNode(2);
        TreeNode q = new TreeNode(8);
        System.out.println(s.lowestCommonAncestor(root, p, q).val);
        Integer[] nums2 = {6,2,8,0,4,7,9,NULL,NULL,3,5};
        vec = new Vector<Integer>(Arrays.asList(nums2));
        root = createBinaryTree(vec);
        p = new TreeNode(2);
        q = new TreeNode(4);
        System.out.println(s.lowestCommonAncestor(root, p, q).val);
    }
}

输出:

6
2


2. 随机分组问题

已知有16只男子足球队参加2008年奥运会。写一段程序将球队随机分成4组

出处:

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

代码:

import java.util.*;
class StringToDateDemo {
    public static void main(String args[]) {
        ArrayList<String> teams = new ArrayList<String>() {
            {
                add("a");
                add("b");
                add("c");
                add("d");
                add("e");
                add("f");
                add("g");
                add("h");
                add("i");
                add("j");
                add("k");
                add("l");
                add("m");
                add("n");
                add("o");
                add("p");
            }
        };
        Collections.shuffle(teams);
        ArrayList<String> group1 = new ArrayList<String>();
        ArrayList<String> group2 = new ArrayList<String>();
        ArrayList<String> group3 = new ArrayList<String>();
        ArrayList<String> group4 = new ArrayList<String>();
        group1.addAll(teams.subList(0, teams.size() / 4 + teams.size() % 4));
        group2.addAll(teams.subList(teams.size() / 4 + teams.size() % 4, 2 * teams.size() / 4 + teams.size() % 4));
        group3.addAll(teams.subList(2*teams.size() / 4 + teams.size() % 4, 3 * teams.size() / 4 + teams.size() % 4));
        group4.addAll(teams.subList(3*teams.size() / 4 + teams.size() % 4, teams.size()));
    }
}

输出:(随机)

[h, a, i, n]
[j, l, k, e]
[b, p, g, c]
[o, d, f, m]

Tips: 因为是连续字母,ArrayList<String> teams 用循环赋值即可。

ArrayList<String> teams = new ArrayList<>();
for (int i = 0; i < 16; i++) {
    teams.add(String.valueOf((char)(i + 'a')));
}


3. K 个一组翻转链表

给你一个链表,每 个节点一组进行翻转,请你返回翻转后的链表。

是一个正整数,它的值小于或等于链表的长度。

如果节点总数不是 的整数倍,那么请将最后剩余的节点保持原有顺序。

进阶:

  • 你可以设计一个只使用常数额外空间的算法来解决此问题吗?
  • 你不能只是单纯的改变节点内部的值,而是需要实际进行节点交换。

示例 1:

输入:head = [1,2,3,4,5], k = 2
输出:[2,1,4,3,5]

示例 2:

输入:head = [1,2,3,4,5], k = 3
输出:[3,2,1,4,5]

示例 3:

输入:head = [1,2,3,4,5], k = 1
输出:[1,2,3,4,5]

示例 4:

输入:head = [1], k = 1
输出:[1]

提示:

  • 列表中节点的数量在范围 sz 内
  • 1 <= sz <= 5000
  • 0 <= Node.val <= 1000
  • 1 <= k <= sz

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

```Java
public class ListNode {
    int val;
    ListNode next;
    ListNode() {
    }
    ListNode(int val) {
        this.val = val;
    }
    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}
class Solution {
    public ListNode reverseKGroup(ListNode head, int k) {
        if (head == null) {
            return null;
        }
        ListNode a = head, b = head;
        for (int i = 0; i < k; i++) {
            if (b == null) {
                return a;
            }
            b = b.next;
        }
        ListNode newHead = reverse(a, b);
        a.next = reverseKGroup(b, k);
        return newHead;
    }
    public ListNode reverse(ListNode a, ListNode b) {
        ListNode pre, cur, nxt;
        pre = null;
        cur = a;
        nxt = a;
        while (nxt != b) {
            __________________;
        }
        return pre;
    }
}
```

出处:

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

代码:

import java.util.*;
import java.util.LinkedList;
public class reverseKGroup {
    public static class ListNode {
        int val;
        ListNode next;
        ListNode() {
        }
        ListNode(int val) {
            this.val = val;
        }
        ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }
    public static class Solution {
        public ListNode reverseKGroup(ListNode head, int k) {
            if (head == null) {
                return null;
            }
            ListNode a = head, b = head;
            for (int i = 0; i < k; i++) {
                if (b == null) {
                    return a;
                }
                b = b.next;
            }
            ListNode newHead = reverse(a, b);
            a.next = reverseKGroup(b, k);
            return newHead;
        }
        public ListNode reverse(ListNode a, ListNode b) {
            ListNode pre, cur, nxt;
            pre = null;
            cur = a;
            nxt = a;
            while (nxt != b) {
                nxt = cur.next;
                cur.next = pre;
                pre = cur;
                cur = nxt;
            }
            return pre;
        }
    }
    public static ListNode createLinkedList(int[] nums) {
        if (nums == null || nums.length == 0) {
            return null;
        }
        ListNode head = new ListNode(nums[0]);
        ListNode cur = head;
        for (int i = 1; i < nums.length; i++) {
            cur.next = new ListNode(nums[i]);
            cur = cur.next;
        }
        return head;
    }
    public static void printLinkedList(ListNode head) {
        ListNode cur = head;
        while (cur != null) {
            System.out.print(cur.val + "->");
            cur = cur.next;
        }
        System.out.println("null");
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] nums = {1,2,3,4,5};
        ListNode head = createLinkedList(nums);
        printLinkedList(head);
        printLinkedList(s.reverseKGroup(head, 2));
        head = createLinkedList(nums);
        printLinkedList(s.reverseKGroup(head, 3));
        head = createLinkedList(nums);
        printLinkedList(s.reverseKGroup(head, 1));
    }
}

输出:

1->2->3->4->5->null
2->1->4->3->5->null
3->2->1->4->5->null
1->2->3->4->5->null


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

Vue 框架入门介绍

前言 前端时间工作任务没有那么忙&#xff0c;在技术总监沟通中他认为我自己花点时间做技术扩展&#xff0c;由于项目中用到前端部分功能&#xff0c;框架用的是Vue&#xff0c;本身项目中和前端同时接触比较多&#xff0c;而且公司有现成的项目可以供我去练习&#xff0c;所以…

存储资源调优技术——SmartMigration智能数据迁移技术

目录 基本概念 工作原理 注意事项 基本概念 智能数据迁移技术是业务迁移的关键技术 在不中断主机业务的情况下&#xff0c;实现源LUN上的业务完整--业务相关的所有数据 迁移到目标LUN上 工作原理 业务数据同步 创建SmartMigration&#xff0c;源LUN和目标LUN之间建立Pair关系&a…

RabbitMq、Kafka、RocketMq整理

MQ的主要作用:异步提高性能、解耦提高扩展性、削峰。 一、常见中间件对比 Kafka、RocketMq和RabbitMq最大的区别就是:前两个是分布式存储。 1.1、ActiveMq 优点:1)完全支持jms规范的消息中间件 ,2)提供丰富的api, 3)多种集群构建模式。 缺点:)在高并发的场景下,性能可…

计算机视觉——day88 读论文:基于驾驶员注意视野的交通目标检测与识别

基于驾驶员注意视野的交通目标检测与识别 II. RELATED WORKSA. 通用对象检测B. 交通标志检测与识别C. 车辆检测D.行人检测E. 交通灯检测 III. PROPOSED METHODA. The RoadLAB DatasetB. 驾驶员注视定位C. 目标检测阶段模型A模型B D.数据扩充E.综合检测结果F.物体识别阶段 IV. 实…

【Git】Git(分布式项目管理工具)在Windows本地/命令行中的基本操作以及在gitee中的操作,使用命令行、window,进行提交,同步,克隆

介绍 这里是小编成长之路的历程&#xff0c;也是小编的学习之路。希望和各位大佬们一起成长&#xff01; 以下为小编最喜欢的两句话&#xff1a; 要有最朴素的生活和最遥远的梦想&#xff0c;即使明天天寒地冻&#xff0c;山高水远&#xff0c;路远马亡。 一个人为什么要努力&a…

​【五一创作】基于mysql关系型实现分布式锁

看完该文预计用时&#xff1a;15分钟 看之前应具体的技术栈&#xff1a;springboot mysql nginx&#xff08;了解即可&#xff09; 目录 0.写在前面 1. 从减库存聊起 1.1. 环境准备 1.2. 简单实现减库存 1.3. 演示超卖现象 1.4. jvm锁问题演示 1.4.2. 原理 1.5. 多服务问…

Linux CentOS本地搭建Web站点,并实现公网访问

文章目录 前言1. 本地搭建web站点2. 测试局域网访问3. 公开本地web网站3.1 安装cpolar内网穿透3.2 创建http隧道&#xff0c;指向本地80端口3.3 配置后台服务 4. 配置固定二级子域名5. 测试使用固定二级子域名访问本地web站点 转载自cpolar文章&#xff1a;Linux CentOS本地搭建…

ChatGPT提示词工程(六):Expanding扩展

目录 一、说明二、安装环境三、扩展&#xff08;Expanding&#xff09;1. 自定义自动回复客户电子邮件2. 提醒模型使用客户电子邮件中的详细信息3. 参数 temperature 一、说明 这是吴恩达 《ChatGPT Prompt Engineering for Developers》 的课程笔记系列。 本文是第六讲的内容…

linux编写脚本之快速入门

前言 在进行Linux测试时编写脚本是必不可少的。最近经常使用Linux&#xff0c;感觉太频繁地敲击键盘有些累了&#xff0c;于是想到了Shell脚本。可以把太多的命令写成一个脚本&#xff0c;这样每次执行一遍 shell文件&#xff0c;就可以省去了敲击键盘的时间。于是在网上搜了一…

3.7 虚拟存储器

学习目标&#xff1a; 建议按照以下学习目标进行学习&#xff1a; 了解虚拟存储器的基本概念和原理。包括什么是虚拟存储器、虚拟地址和物理地址、虚拟内存、页面置换算法等。 了解虚拟存储器的实现方式。包括基于请求分页、请求分段和请求段页混合的虚拟存储器实现方式&…

前置操作:Kubernetes快速安装组件Kubectl Kubeadam Kubeinit

文章目录 配置K8S主从集群前置准备操作一&#xff1a;主节点操作 查看主机域名->编辑域名1.1 编辑HOST 从节点也做相应操作1.2 从节点操作 查看从节点102域名->编辑域名1.3 从节点操作 查看从节点103域名->编辑域名 二&#xff1a;安装自动填充&#xff0c;虚拟机默认…

对接ChatGPT开发对话机器人小程序

前言 ChatGPT已经非常火爆了&#xff0c;企业开始招聘ChatGPT工程师&#xff0c;可能对接ChatGPT接口进行企业级开发是程序员必备的技能了。本篇文章主要是基于ChatGPT开发接口进行对接&#xff0c;使用微信小程序制作一款自己的聊天机器人&#xff0c;通过这一案例你可以展开…

图神经网络:在KarateClub上动手实现图神经网络

文章说明&#xff1a; 1)参考资料&#xff1a;PYG官方文档。超链。 2)博主水平不高&#xff0c;如有错误还望批评指正。 3)我在百度网盘上传了这篇文章的jupyter notebook。超链。提取码8888。 文章目录 文献阅读&#xff1a;代码实操&#xff1a; 文献阅读&#xff1a; 参考文…

JavaWeb05(删除增加修改功能实现连接数据库)

目录 一.实现删除功能 1.1 url如何传参&#xff1f; xx.do?参数参数值&参数名参数值 1.2 servlet如何拿对应值&#xff1f; //根据参数名拿到对应的参数值 String str req.getParameter("参数名") 1.3 如何询问&#xff1f; οnclick"return con…

区位码-GB2312

01-09区为特殊符号 10-15区为用户自定义符号区&#xff08;未编码&#xff09; 16-55区为一级汉字&#xff0c;按拼音排序 56-87区为二级汉字&#xff0c;按部首/笔画排序 88-94区为用户自定义汉字区&#xff08;未编码&#xff09; 特殊符号 区号:01 各类符号 0 1 2 3 4 …

I/O多路转接——epoll服务器代码编写

目录 一、poll​ 二、epoll 1.epoll 2.epoll的函数接口 ①epoll_create ②epoll_ctl ③epoll_wait 3.操作原理 三、epoll服务器编写 1.日志打印 2.TCP服务器 3.Epoll ①雏形 ②InitEpollServer 与 RunServer ③HandlerEvent 四、Epoll的工作模式 1.LT模式与ET…

第二十一章 光源

光源是每个场景必不可少的部分&#xff0c;光源除了能够照亮场景之外&#xff0c;还可以产生阴影效果。 Unity中分为四种光源类型&#xff1a; 1. 方向光&#xff1a;Directional Light 用于模拟太阳光&#xff0c;方向光任何地方都能照射到。 2. 点光源&#xff1a;Point L…

JavaWeb-Servlet【内含思维导图】

目录 Servlet思维导图​编辑 1.什么是Servlet 2.Servelt概述 3.Servlet-Quickstart Your Project 3.1创建一个Web项目&#xff0c;导入Servlet依赖 3.1.1 选择Servlet导入依赖 3.1.2 导入Servlet依赖 3.2 在Web项目&#xff0c;定义类&#xff0c;实现Servlet接口…

Java8新特性-流式操作

在Java8中提供了新特性—流式操作&#xff0c;通过流式操作可以帮助我们对数据更快速的进行一些过滤、排序、去重、最大、最小等等操作并且内置了并行流将流划分成多个线程进行并行执行&#xff0c;提供更高效、快速的执行能力。接下来我们一起看看Java8为我们新增了哪些便捷呢…

Python基础合集 练习19(类与对象3(多态))

多态 class Horse: def init(self, name) -> None: self.name name def fature(self):return 父亲-----马的名字: {0}.format(self.name)def mover(self):print(马儿跑起来很潇洒)class Monkey: def init(self, name) -> None: self.name name def fature(self):ret…