Java每日一练(20230401)

目录

1. 合并K个升序链表  🌟🌟🌟

2. 最长有效括号  🌟🌟🌟

3. 分割回文串  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 合并K个升序链表

给你一个链表数组,每个链表都已经按升序排列。

请你将所有链表合并到一个升序链表中,返回合并后的链表。

示例 1:

输入:lists = [[1,4,5],[1,3,4],[2,6]]
输出:[1,1,2,3,4,4,5,6]
解释:链表数组如下:[1->4->5, 1->3->4, 2->6]将它们合并到一个有序链表中得到 1->1->2->3->4->4->5->6

示例 2:

输入:lists = []
输出:[]

示例 3:

输入:lists = [[]]
输出:[]

提示:

  • k == lists.length
  • 0 <= k <= 10^4
  • 0 <= lists[i].length <= 500
  • -10^4 <= lists[i][j] <= 10^4
  • lists[i] 按 升序 排列
  • lists[i].length 的总和不超过 10^4

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

```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 mergeKLists(ListNode[] lists) {
        if (lists.length == 0)
            return null;
        return merge(lists, 0, lists.length - 1);
    }

    public ListNode merge(ListNode[] lists, int low, int high) {
        if (high - low == 0)
            return lists[low];
        else if (high - low == 1)
            return mergeTwoLists(lists[low], lists[high]);
        else {
            int mid = (low + high) / 2;
            _____________________________;
            return mergeTwoLists(tmp1, tmp2);
        }
    }

    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        ListNode head = new ListNode();
        ListNode p = head;
        while (l1 != null && l2 != null) {
            if (l1.val > l2.val) {
                p.next = l2;
                l2 = l2.next;
                p = p.next;
            } else {
                p.next = l1;
                l1 = l1.next;
                p = p.next;
            }
        }
        if (l1 != null)
            p.next = l1;
        if (l2 != null)
            p.next = l2;
        return head.next;
    }
}
```

出处:

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

代码:

public class mergeKLists {
    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 mergeKLists(ListNode[] lists) {
            if (lists == null || lists.length == 0)
                return null;
            return merge(lists, 0, lists.length - 1);
        }
        public ListNode merge(ListNode[] lists, int low, int high) {
            if (low == high)
                return lists[low];
            int mid = low + (high - low) / 2;
            ListNode l1 = merge(lists, low, mid);
            ListNode l2 = merge(lists, mid + 1, high);
            return mergeTwoLists(l1, l2);
        }
        public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
            ListNode dummy = new ListNode(-1);
            ListNode cur = dummy;
            while (l1 != null && l2 != null) {
                if (l1.val < l2.val) {
                    cur.next = l1;
                    l1 = l1.next;
                } else {
                    cur.next = l2;
                    l2 = l2.next;
                }
                cur = cur.next;
            }
            cur.next = l1 != null ? l1 : l2;
            return dummy.next;
        }
    }
    public static ListNode[] arraysToLists(int[][] nums) {
        ListNode[] lists = new ListNode[nums.length];
        for (int i = 0; i < nums.length; i++) {
            int[] arr = nums[i];
            ListNode head = new ListNode(0);
            ListNode cur = head;
            for (int num : arr) {
                cur.next = new ListNode(num);
                cur = cur.next;
            }
            lists[i] = head.next;
        }
        return lists;
    }
    public static void traverseList(ListNode head) {
        ListNode cur = head;
        int count = 0;
        while (cur != null) {
            count++;
            cur = cur.next;
        }
        System.out.print("[");
        for (cur = head; cur != null; cur = cur.next) {
            if (--count>0)
                System.out.print(cur.val + ",");
            else
                System.out.print(cur.val);
        }
        System.out.println("]");
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[][] lists = {{1,4,5},{1,3,4},{2,6}};
        ListNode[] nodelists = arraysToLists(lists);
        traverseList(s.mergeKLists(nodelists));
    }
}

输出:

[1,1,2,3,4,4,5,6]


2. 最长有效括号

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

示例 1:

输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"

示例 2:

输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"

示例 3:

输入:s = ""
输出:0

提示:

  • 0 <= s.length <= 3 * 10^4
  • s[i] 为 '(' 或 ')'

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

```Java
import java.util.*;
class Solution {
    public int longestValidParentheses(String s) {
        int left = 0, right = 0, max = 0;
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(')
                left++;
            else
                right++;
            if (left == right)
                max = Math.max(max, left * 2);
            if (right > left)
                left = right = 0;
        }
        left = 0;
        right = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            __________________;
            if (left == right)
                max = Math.max(max, left * 2);
            if (right < left)
                left = right = 0;
        }
        return max;
    }
}
```

出处:

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

代码:

import java.util.*;
public class longestValidParentheses {
    public static class Solution {
        public int longestValidParentheses(String s) {
            int left = 0, right = 0, max = 0;
            for (int i = 0; i < s.length(); i++) {
                if (s.charAt(i) == '(')
                    left++;
                else
                    right++;
                if (left == right)
                    max = Math.max(max, left * 2);
                if (right > left)
                    left = right = 0;
            }
            left = 0;
            right = 0;
            for (int i = s.length() - 1; i >= 0; i--) {
                if (s.charAt(i) == '(')
                    left++;
                else
                    right++;
                if (left == right)
                    max = Math.max(max, left * 2);
                if (right < left)
                    left = right = 0;
            }
            return max;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        System.out.println(s.longestValidParentheses("(()"));
        System.out.println(s.longestValidParentheses(")()()"));
        System.out.println(s.longestValidParentheses(""));
    }
}

输出:

2
4
0


3. 分割回文串

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。

回文串 是正着读和反着读都一样的字符串。

示例 1:

输入:s = "aab"
输出:[["a","a","b"],["aa","b"]]

示例 2:

输入:s = "a"
输出:[["a"]]

提示:

  • 1 <= s.length <= 16
  • s 仅由小写英文字母组成

出处:

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

代码:

import java.util.*;
public class partition {
    public static class Solution {
        public List<List<String>> partition(String s) {
            boolean[][] dp = new boolean[s.length()][s.length()];
            for (int len = 1; len <= s.length(); len++) {
                for (int i = 0; i <= s.length() - len; i++) {
                    if (len == 1)
                        dp[i][i] = true;
                    else if (s.charAt(i) == s.charAt(i + len - 1) && (len == 2 || dp[i + 1][i + len - 2])) {
                        dp[i][i + len - 1] = true;
                    }
                }
            }
            return solution(s, 0, dp);
        }
        public List<List<String>> solution(String s, int start, boolean[][] dp) {
            ArrayList<List<String>> list = new ArrayList<>();
            if (start == s.length()) {
                List<String> li = new ArrayList<>();
                list.add(li);
                return list;
            }
            for (int i = start; i < s.length(); i++) {
                if (dp[start][i]) {
                    String first = s.substring(start, i + 1);
                    for (List<String> li : solution(s, i + 1, dp)) {
                        li.add(0, first);
                        list.add(li);
                    }
                }
            }
            return list;
        }
    }
    public static void showStringLists(List<List<String>> lists){
        int size_lists = lists.size();
        System.out.print("[");
        for (List<String> innerList : lists) {
            int size_inner = innerList.size();
            System.out.print("[\"");
            for (String str : innerList) {
                System.out.print(str);
                if (--size_inner>0)
                    System.out.print("\",\"");
            }
            System.out.print("\"]");
            if (--size_lists>0)
                System.out.print(", ");
        }
        System.out.println("]");       
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        showStringLists(s.partition("aab"));
    }
}

输出:

[["a","a","b"], ["aa","b"]]


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统一键安装最新内核并开启 BBR 脚本

本脚本适用环境 系统支持&#xff1a;CentOS 6&#xff0c;Debian 8&#xff0c;Ubuntu 16 虚拟技术&#xff1a;OpenVZ 以外的&#xff0c;比如 KVM、Xen、VMware 内存要求&#xff1a;≥128M 更新日期&#xff1a;2022 年 5 月 11 日 关于本脚本 1、本脚本已在 蓝易云 上…

后端Springboot框架搭建APi接口开发(第二章)

上一章我讲述了如何使用Mybatis操作数据库。这一章我讲述如何利用Sptring框架搭建API接口 第一节&#xff1a;封装SqlSessionFactory工具类 在API操作数据库大量调用SqlSessionFactory&#xff0c;因此应将SqlSessionFactory封装成工具类供方法随时调用 在文件结构中的util文…

前端直接生成GIF动态图实践

前言去年在博客中发了两篇关于GIF动态生成的博客&#xff0c;GIF图像动态生成-JAVA后台生成和基于FFmpeg的Java视频Mp4转GIF初探&#xff0c;在这两篇博客中都是采用JAVA语言在后台进行转换。使用JAVA的同学经过自己的改造和开发也可以应用在项目上。前段时间有朋友私下问&…

MySQL主从复制、读写分离(MayCat2)实现数据同步

文章目录1.MySQL主从复制原理。2.实现MySQL主从复制&#xff08;一主两从&#xff09;。3.基于MySQL一主两从配置&#xff0c;完成MySQL读写分离配置。&#xff08;MyCat2&#xff09;1.MySQL主从复制原理。 MySQL主从复制是一个异步的复制过程&#xff0c;底层是基于Mysql数据…

设计模式之门面模式(C++)

作者&#xff1a;翟天保Steven 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 一、门面模式是什么&#xff1f; 门面模式是一种结构型的软件设计模式&#xff0c;也叫外观模式&#xff0c;它提供了统一的接口去…

程序员的天花板到底有多高?

程序员是很多人眼里的职业天花板&#xff0c;毕竟薪资水平、发展前景摆在那里&#xff0c;而且&#xff0c;一个又会debug又会修电脑&#xff08;划掉&#xff09;&#xff0c;还会费心为你制造浪漫的程序员&#xff0c;有谁不喜欢呢&#xff1f; 但现实中很多程序员都焦虑担忧…

从0使用TCP手撸http服务器六

html模板设计&#xff1a; 上篇我们说到通过路由去返回不同的html页面&#xff0c;如果每一个页面都是一个数组的话&#xff0c;那么我们可能需要很多数组&#xff0c;里面很多内容都是一样的&#xff0c;这样子会浪费我们单片机很多flash&#xff0c;我们需要把共同的部分固定…

神经网络之反向传播算法(加入Nesterov动量的误差反向传播算法)

文章目录1、Nesterov动量2、结合Nesterov动量的误差反向传播算法3、算法实现3.1 训练过程3.2 测试过程4、参考源码及数据集1、Nesterov动量 在动量法提出不久之后&#xff0c;Nesterov动量也随之被提了出来&#xff0c;此方法属于动量法的进一步发展&#xff0c;与动量法不同的…

基于windows11配置深度学习环境包含WSL2配置ubuntu20.04

基于windows11配置深度学习环境包含WSL2配置ubuntu20.04目录平台WSL2 系统准备(Windows Subsystem of Linux)安装WSL2基于WSL2中的Ubuntu安装CUDA和cudnnCUDA 安装目录 平台 系统 : windows11 专业版 CPU Intel I7 8750hq 显卡&#xff1a;Nvidia GTX1060移动端 显卡驱动版本…

安装Windows11提示这台电脑不符合安装此版本的Windows所需的最低系统要求

现在很多用户都会选择用U盘来安装系统&#xff0c;最新有用户在使用U盘安装Win11系统的时候&#xff0c;结果安装到第一步就提示这台电脑无法运行Windows11&#xff0c;这台电脑不符合安装此版本的Windows所需的最低系统要求。下面小编就来教大家解决此问题的方法。 问题解析&a…

BIO/NIO/AIO/IO多路复用简介

bio、nio、aio、io多路复用、reactor模式io&#xff0c;在将IO的时候&#xff0c;是不是都遇到过这些概念&#xff0c;也有种傻傻分不清&#xff1f;甚至别人在大谈特谈的时候&#xff0c;一会nio&#xff0c;一会io多路复用&#xff0c;一会又搞到reactor模式上去了&#xff1…

一文搞懂原型和原型链

在了解原型和原型链之前首先得明确它俩是什么东西&#xff1a; 原型&#xff1a;prototype 又称显示原型 1、原型是一个普通对象 2、只有构造函数才具备该属性 3、公有属性可操作 隐式原型&#xff1a;__proto__ 1、只有对象(普通对象、函数对象&#xff09;具备 2、私有的对…

《Spring系列》第2章 解析XML获取Bean

一、基础代码 Spring加载bean实例的代码 public static void main(String[] args) throws IOException {// 1.获取资源Resource resource new ClassPathResource("bean.xml");// 2.获取BeanFactoryDefaultListableBeanFactory factory new DefaultListableBeanFa…

Airtest自动化测试工具实战演练

一开始知道Airtest大概是在年初的时候&#xff0c;当时&#xff0c;看了一下官方的文档&#xff0c;大概是类似Sikuli的一个工具&#xff0c;主要用来做游戏自动化的&#xff0c;通过截图的方式用来解决游戏自动化测试的难题。最近&#xff0c;移动端测试的同事尝试用它的poco库…

iwebsec靶场-命令执行漏洞

漏洞简介 命令执行漏洞&#xff08;Command Injection&#xff09;是一种常见的安全漏洞&#xff0c;也被称为代码注入漏洞。它允许攻击者将恶意代码注入到受攻击的应用程序中&#xff0c;从而可以在应用程序的上下文中执行任意命令。 命令执行漏洞通常出现在Web应用程序中&…

好的表单设计应该遵循什么规则?

在数字化时代&#xff0c;表单已经成为了人们生活中不可或缺的一部分。它们可能是网站注册表格、调查问卷、订单表格或者其他类型的表格。无论表单的类型是什么&#xff0c;都必须经过精心设计才能提供良好的用户体验。在本文中&#xff0c;我们将探讨如何设计一份用户体验好的…

Redis缓存双写一致性

目录双写一致性Redis与Mysql双写一致性canal配置流程代码案例双写一致性理解缓存操作细分缓存一致性多种更新策略挂牌报错,凌晨升级先更新数据库,在更新缓存先删除缓存,在更新数据库先更新数据库,在删除缓存延迟双删策略总结双写一致性 Redis与Mysql双写一致性 canal 主要是…

低代码开发公司:用科技强力开启产业分工新时代!

实现办公自动化&#xff0c;是不少企业的共同追求。低代码开发公司会遵循时代发展规律&#xff0c;注入强劲的科技新生力量&#xff0c;在低代码开发市场厚积爆发、努力奋斗&#xff0c;推动企业数字化转型升级&#xff0c;为每一个企业的办公自动化升级创新贡献应有的力量。 一…

【数据结构与算法】堆的实现(附源码)

目录 一.堆的概念及结构 二.接口实现 A.初始化 Heapinit 销毁 Heapdestroy B.插入 Heappush 向上调整 AdjustUp 1.Heappush 2.AdjustUp C.删除 Heappop 向下调整 AdjustDown D.堆的判空 Heapempty 堆顶数据 Heaptop 堆的大小 Heapsize 三.源码 Heap.h He…

【模板】带权并查集

文章目录1. 奇偶游戏2. 银河英雄传说1. 奇偶游戏 239. 奇偶游戏 题意&#xff1a; 依次给出多个区间的含 111 的个数的奇偶性&#xff0c;找出第一个不符合的答案的回答。 思路&#xff1a; 已知区间[a,b][a,b][a,b][b,c][b,c][b,c]的奇偶性&#xff0c;那么具有传递性&…
最新文章