Java每日一练(20230422)

news2024/12/22 22:20:04

目录

1. 拼接最大数  🌟🌟🌟

2. Z 字形变换  🌟🌟

3. 跳跃游戏  🌟🌟

🌟 每日一练刷题专栏 🌟

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏


1. 拼接最大数

给定长度分别为 m 和 n 的两个数组,其元素由 0-9 构成,表示两个自然数各位上的数字。现在从这两个数组中选出 k (k <= m + n) 个数字拼接成一个新的数,要求从同一个数组中取出的数字保持其在原数组中的相对顺序。

求满足该条件的最大数。结果返回一个表示该最大数的长度为 k 的数组。

说明: 请尽可能地优化你算法的时间和空间复杂度。

示例 1:

输入:
nums1 = [3, 4, 6, 5]
nums2 = [9, 1, 2, 5, 8, 3]
k = 5
输出:[9, 8, 6, 5, 3]

示例 2:

输入:
nums1 = [6, 7]
nums2 = [6, 0, 4]
k = 5

输出:[6, 7, 6, 0, 4]

示例 3:

输入:
nums1 = [3, 9]
nums2 = [8, 9]
k = 3

输出:[9, 8, 9]

出处:

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

代码:

import java.util.*;
class maxNumber {
    public static class Solution {
        private int[] maxInNums(int[] nums, int k) {
          int[] max = new int[k];
          int len = nums.length;
          for (int i = 0, j = 0; i < len; ++i) {
             while (j > 0 && k - j < len - i && max[j - 1] < nums[i])
                 --j;
             if (j < k)
                 max[j++] = nums[i];
          }
          return max;
        }
        private boolean greater(int[] nums1Max, int i, int[] nums2Max, int j) {
          int lenNums1Max = nums1Max.length;
          int lenNums2Max = nums2Max.length;
          while (i < lenNums1Max && j < lenNums2Max && nums1Max[i] == nums2Max[j]) {
             ++i;
             ++j;
          }
          return j == lenNums2Max || (i < lenNums1Max && nums1Max[i] > nums2Max[j]);
        }
        private int[] merge(int[] nums1Max, int[] nums2Max) {
          int lenCurRes = nums1Max.length + nums2Max.length;
          int[] curRes = new int[lenCurRes];
          for (int i = 0, j = 0, m = 0; m < lenCurRes; ++m) {
             curRes[m] = greater(nums1Max, i, nums2Max, j) ? nums1Max[i++] : nums2Max[j++];
          }
          return curRes;
        }
        public int[] maxNumber(int[] nums1, int[] nums2, int k) {
          int[] res = null;
          for (int i = Math.max(k - nums2.length, 0); i <= Math.min(nums1.length, k); ++i) {
             int[] merge = merge(maxInNums(nums1, i), maxInNums(nums2, k - i));
             res = (res == null || greater(merge, 0, res, 0)) ? merge : res;
          }
          return res;
        }
    }
    public static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; ++i) {
            System.out.print(arr[i]);
            if (i+1 < arr.length) {
                System.out.print(",");
            }
        }
        System.out.println("]");
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] nums1 = {3, 4, 6, 5};
        int[] nums2 = {9, 1, 2, 5, 8, 3};
        printArray(s.maxNumber(nums1, nums2, 5));
        int[] nums3 = {6, 7};
        int[] nums4 = {6, 0, 4};
        printArray(s.maxNumber(nums3, nums4, 5));
        int[] nums5 = {3, 9};
        int[] nums6 = {8, 9};
        printArray(s.maxNumber(nums5, nums6, 3));
    }
}

输出:

[9,8,6,5,3]
[6,7,6,0,4]
[9,8,9]


2. Z 字形变换

将一个给定字符串 s 根据给定的行数 numRows ,以从上往下、从左到右进行 Z 字形排列。

比如输入字符串为 "PAYPALISHIRING" 行数为 3 时,排列如下:

P   A   H   N
A P L S I I G
Y   I   R

之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"PAHNAPLSIIGYIR"

请你实现这个将字符串进行指定行数变换的函数:

string convert(string s, int numRows);

示例 1:

输入:s = "PAYPALISHIRING", numRows = 3
输出:"PAHNAPLSIIGYIR"

示例 2:

输入:s = "PAYPALISHIRING", numRows = 4
输出:"PINALSIGYAHRPI"
解释:
P     I    N
A   L S  I G
Y A   H R
P     I

示例 3:

输入:s = "A", numRows = 1
输出:"A"

提示:

  • 1 <= s.length <= 1000
  • s 由英文字母(小写和大写)、',' 和 '.' 组成
  • 1 <= numRows <= 1000

出处:

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

代码:

import java.util.*;
class convert {
    public static class Solution {
        public String convert(String s, int numRows) {
            if (numRows == 1)
                return s;
            int len = s.length();
            if (len <= numRows)
                return s;
            int cycle_len = 2 * numRows - 2;
            int full_cycles = len / cycle_len;
            int left = len % cycle_len;
            StringBuilder r = new StringBuilder();
            int i;
            for (i = 0; i < full_cycles; ++i) {
                r.append(s.charAt(i * cycle_len));
            }
            if (left > 0) {
                r.append(s.charAt(i * cycle_len));
            }
            for (i = 0; i < numRows - 2; ++i) {
                int j;
                for (j = 0; j < full_cycles; ++j) {
                    r.append(s.charAt(j * cycle_len + i + 1));
                    r.append(s.charAt(j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)));
                }
                if (left > 0) {
                    if (j * cycle_len + i + 1 < len)
                        r.append(s.charAt(j * cycle_len + i + 1));
                    if (j * cycle_len + i + 1 + cycle_len - 2 * (i + 1) < len)
                        r.append(s.charAt(j * cycle_len + i + 1 + cycle_len - 2 * (i + 1)));
                }
            }
            for (i = 0; i < full_cycles; ++i)
                r.append(s.charAt(i * cycle_len + numRows - 1));
            if (left >= numRows)
                r.append(s.charAt(i * cycle_len + numRows - 1));
            return r.toString();
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        String str = "PAYPALISHIRING";
        System.out.println(s.convert(str, 3));
        System.out.println(s.convert(str, 4));
    }
}

输出:

PAHNAPLSIIGYIR
PINALSIGYAHRPI


3. 跳跃游戏

给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。

数组中的每个元素代表你在该位置可以跳跃的最大长度。

判断你是否能够到达最后一个下标。

示例 1:

输入:nums = [2,3,1,1,4]
输出:true
解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

示例 2:

输入:nums = [3,2,1,0,4]
输出:false
解释:无论怎样,总会到达下标为 3 的位置。但该下标的最大跳跃长度是 0 , 所以永远不可能到达最后一个下标。

提示:

  • 1 <= nums.length <= 3 * 10^4
  • 0 <= nums[i] <= 10^5

出处:

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

代码:

import java.util.*;
class canJump {
    public static class Solution {
        public boolean canJump(int[] nums) {
            boolean can = true;
            if (nums.length < 2) {
                return can;
            }
            int n = nums.length;
            int stride = 1;
            for (int i = n - 2; i >= 0; i--) {
                if (nums[i] < stride) {
                    stride++;
                    can = false;
                } else {
                    can = true;
                    stride = 1;
                }
            }
            return can;
        }
    }
    public static void main(String[] args) {
        Solution s = new Solution();
        int[] nums = {2,3,1,1,4};
        System.out.println(s.canJump(nums));
        int[] nums2 = {3,2,1,0,4};
        System.out.println(s.canJump(nums2));
    }
}

输出:

true
fasle


🌟 每日一练刷题专栏 🌟

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

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

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

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

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

Golang每日一练 专栏

Python每日一练 专栏

C/C++每日一练 专栏

Java每日一练 专栏

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

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

相关文章

su命令无权限,如何解决

正常情况下输入su命令执行如下 当遇到这种情况时别慌&#xff0c;很大概率是你还没连接Linux服务器。 在连接成功后&#xff0c;再尝试使用su命令成功的话&#xff0c;就会让你输入其他用户的密码。因为我只有一个普通用户和一个根目录&#xff0c;默认情况下是直接切换根用户。…

华为云企业快成长技术创新论坛全国巡演北京首站圆满落幕

4月15日&#xff0c;华为云联合msup举办的“企业快成长大数据技术创新论坛北京站”圆满举办&#xff0c;100余位来自全国各地的大数据技术总监/技术经理/研发工程师共聚一堂&#xff0c;共探数据湖的架构演进&#xff0c;数据治理方法论及最佳经验实践。 首先由华为云大数据人工…

APM/Air32F103/CH32F203/STM32F103程序互通说明

APM/Air32F103/CH32F203/STM32F103程序互通说明 ✨感觉国内中低端芯片就像 春秋时期&#xff0c;各诸侯群雄纷争的局面。各厂商都推出相关的替代竞品方案。这对于嵌入式开发从业者来说&#xff0c;有更多的开发方案可选。同时开发者不得不面对不同方案&#xff0c;项目移植工作…

724. 寻找数组的中心下标

力扣724. 寻找数组的中心下标 一、题目描述&#xff1a; 给你一个整数数组 nums &#xff0c;请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标&#xff0c;其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端&#xff0c;那么左侧数之和…

express + TS :解决 TypeScript 报错:“无法重新声明块范围变量”的问题

问题描述 使用 Express TS 开发项目&#xff0c;在两个不同的文件引入相同的依赖&#xff0c;红色波浪线 虽然程序可正常运行 其他问题 无法重新声明块范围变量函数实现重复标识符重复 问题原因 项目中使用 CommonJS 规范&#xff0c;进行模块间的导入导出操作 因为在 Co…

八、Python结合Qt实现点击按钮保存并生成自定义word详细讲解(相信我,耐心看完,一定会有收获的)

一、需求介绍 因为我的毕设需要设计一个系统&#xff0c;然后把结果生成检测报告供企业下载。模型大概已经训练好了&#xff0c;也就差个导出word功能&#xff0c;把模型识别的数据结果输入到word导出即可。 二、最终实现效果 这里随便整个模板来对所需要的函数进行说明&…

Linux常用命令——iperf命令

在线Linux命令查询工具 iperf 网络性能测试工具 补充说明 iperf命令是一个网络性能测试工具。iperf可以测试TCP和UDP带宽质量。iperf可以测量最大TCP带宽&#xff0c;具有多种参数和UDP特性。iperf可以报告带宽&#xff0c;延迟抖动和数据包丢失。利用iperf这一特性&#x…

怎样搭建游戏服务器,传奇复古版手游是怎样搭建的,用云服务器架设游戏技术详细教程

本教程以战神传奇复古修复装备版为例&#xff1a; 本教程资源提供&#xff1a;海盗空间 --------------------------------------------------------------------------------------------------- 系统&#xff1a;Windows Server 2012 R2 x64 -----------------------------…

Python - 优先队列(queue.PriorityQueue heapq)

目录 什么是优先队列 为什么需要优先队列&#xff1f; 优先队列是个啥&#xff1f; 优先队列的工作原理 Python实现一个优先队列 Python内置库中的queue.PriorityQueue的使用 基本操作 多条件优先级实现 Python内置库中的heapq heapq的常用操作 基于heapq实现一个优…

通过AI生成的视频分发了难以检测的恶意软件加载程序

安全研究人员警告说&#xff0c;一种新的恶意软件加载程序被用作 Aurora 信息窃取程序感染链的一部分。 加载程序使用反虚拟机 (VM) 和不寻常的编译技术&#xff0c;这些技术似乎使其非常成功地避免了安全解决方案的检测。 Aurora 信息窃取器是用 Go 编写的&#xff0c;作为恶…

高速下载Arxiv论文的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【微服务笔记19】微服务组件之Nacos注册中心基础环境搭建

这篇文章&#xff0c;主要介绍微服务组件之Nacos注册中心基础环境搭建。 目录 一、Nacos注册中心 1.1、Nacos注册中心 1.2、搭建NacosServer服务端 &#xff08;1&#xff09;下载Nacos Server服务端工程 &#xff08;2&#xff09;修改配置信息 &#xff08;3&#xff0…

【Hello Network】网络编程套接字(三)

作者&#xff1a;小萌新 专栏&#xff1a;网络 作者简介&#xff1a;大二学生 希望能和大家一起进步 本篇博客简介&#xff1a;简单介绍下各种类型的Tcp协议 各种类型Tcp服务器 多进程版的TCP网络程序捕捉SIGCHLD信号让孙子进程执行任务 多线程TCP网络程序线程池版多线程TCP网络…

Elasticsearch学习,请先看这篇!

目录 一、初始elasticsearch 1、概述 简介 发展 2、倒排索引 3、基本概念 文档 索引 Mysql和es的区别 4、分词器 初始分词器 Ik分词器-扩展词库 二、索引库操作 1、mapper属性 2、创建索引库 3、查询、删除索引库 三、文档操作 1、新增文档 2、查询、删除文档…

计算机网络科普

文章目录 1、集线器2、CSMA/CD协议3、交换机3.1 交换机的桥接 4、 路由器5、 路由表6、IP地址7、MAC地址8、ARP协议9、关于网络层次模型10、路由器 1、集线器 计算机之间的相互通信&#xff0c;你会怎么设计&#xff1f; 如果是两台计算机&#xff0c;之间拉一条线&#xff0c;…

ClickHouse性能优化

目录 1 Explain查看执行计划优化sql1.1 基本语法1.2 案例实操1.2.1 查看 PLAIN1.2.2 AST 语法树1.2.3 SYNTAX 语法优化1.2.4 查看 PIPELINE 2 ClickHouse建表优化2.1 数据类型2.1.1 时间字段的类型2.1.2 空值存储类型 2.2 分区和索引2.3 表参数2.4 写入和删除优化2.5 常见配置2…

分享一些提升效率的小工具

1、 IObit Uninstaller IObit Uninstaller是一款简单专业的卸载工具&#xff0c;可以帮我们卸载电脑中顽固难卸的软件和浏览器插件&#xff0c;支持强制一键卸载和文件粉碎功能。 除了卸载软件&#xff0c;它还可以自动帮我们检测软件安装、检测软件更新、查看工具栏和插件。 …

IDEA22.3.3的三个常用经常遇到的配置问题

1、期待效果&#xff1a;【打开iDEA的时候&#xff0c;让开发者选择需要打开的项目】 设置如下 2、期待效果&#xff1a;配置默认的Maven&#xff0c;避免每次新建项目后&#xff0c;都需要去修改Maven配置 同理&#xff0c;修改默认的java版本和自己本地java环境一致 3、新建…

数据库SQL语句优化技巧

当今世界&#xff0c;数据量不断增长&#xff0c;数据库的使用变得越来越普遍。虽然数据库提供了很多强大的功能&#xff0c;但是它们也需要被优化以确保它们的性能得到最大化。在本篇博客中&#xff0c;我们将探讨SQL语句优化的几种技巧&#xff0c;这些技巧可以帮助您提高数据…

零、网络基础概述(TCP/IP模型、端口、网关、DNS、ARP、IP编址与子网划分、UDP、VRP)

文章目录 前言一、网络基础1、TCP/IP模型2、端口的作用&#xff1a;3、MAC 地址4、网关&#xff08;gateway&#xff09;5、域名解析服务&#xff08;DNS&#xff09;6、TCP端口、UDP端口区别&#xff1a;7、交换机与路由器 二、ARP 理论1、定义2、查看ARP缓存3、ARP 报文种类&…