每日一练——Day 13

news2024/11/18 15:45:24

前言:

小亭子正在努力的学习编程,接下来将开启编程题的练习~~

分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~

同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~

第一题

题目描述:

刷题点这里

描述

在命令行输入如下命令:

xcopy /s c:\\ d:\\e,

各个参数如下:

参数1:命令字xcopy

参数2:字符串/s

参数3:字符串c:\\

参数4: 字符串d:\\e

请编写一个参数解析程序,实现将命令行各个参数解析出来。

解析规则:

1.参数分隔符为空格
2.对于用""包含起来的参数,如果中间有空格,不能解析为多个参数。比如在命令行输入xcopy /s "C:\\program files" "d:\"时,参数仍然是4个,第3个参数应该是字符串C:\\program files,而不是C:\\program,注意输出参数时,需要将""去掉,引号不存在嵌套情况。
3.参数不定长

4.输入由用例保证,不会出现不符合要求的输入

数据范围:字符串长度:1\le s\le 1000\1≤s≤1000 

进阶:时间复杂度:O(n)\O(n) ,空间复杂度:O(n)\O(n) 

输入描述:

输入一行字符串,可以有空格

输出描述:

输出参数个数,分解后的参数,每个参数都独占一行

示例1

输入:

xcopy /s c:\\ d:\\e

输出:

4
xcopy
/s
c:\\
d:\\e

解题分析:

整体思路:

本题通过以空格和双引号为间隔,统计参数个数。对于双引号,通过添加flag,保证双引号中的空格被输出

注意:

1、先输出的是个数

2、遇到""空格原样输出

3、没有""遇到空格就换行
4、遇到 "(前括号) 后,先往后移动一位,再判断下一位字符是该输出,还是遇到了 " (后括号) 

5、预设一个标记flag= 1 ,遇到双引号的前一半,flag = 0,在遇到后一半,异或运算后 flag= 1,此时双引号结束

代码实现:

import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str  = in.nextLine();
        int count = 0;
        //统计个数
        for (int i = 0 ; i < str.length(); i++ ) {
            //
            if (str.charAt(i) == '"') {
                do {
                    i++;            //注意:此处i需要先往后移动一位
                } while (str.charAt(i) != '"');

            }
            if (str.charAt(i) == ' ') {
                count ++;
            }

        }
        System.out.println(count + 1);  //因为count统计的是空格数,参数个数等于空格数+1
        /*
        遇到双引号的前一半,flag = 0,在遇到后一半,异或运算后 flag= 1,此时双引号结束
        */
        int flag = 1;
        for (int i = 0 ; i < str.length(); i++ ) {
            if (str.charAt(i) == '"') {
                flag ^= 1;
            }
            //除了双引号和特殊空格以外的字符都要打印
            if (str.charAt(i) != ' ' && str.charAt(i) != '"') {
                System.out.print(str.charAt(i));
            }
            //双引号中的空格需要打印
            if (str.charAt(i) == ' ' && flag == 0) {
                System.out.print(str.charAt(i));
            }
            双引号外碰到空格,需要换行
            if (str.charAt(i) == ' ' && flag == 1) {
                System.out.println();
            }
        }

    }
}

第二题

题目描述:

刷题点这里

描述

小易来到了一条石板路前,每块石板上从1挨着编号为:1、2、3.......
这条石板路要根据特殊的规则才能前进:对于小易当前所在的编号为K的 石板,小易单次只能往前跳K的一个约数(不含1和K)步,即跳到K+X(X为K的一个非1和本身的约数)的位置。 小易当前处在编号为N的石板,他想跳到编号恰好为M的石板去,小易想知道最少需要跳跃几次可以到达。
例如:
N = 4,M = 24:
4->6->8->12->18->24
于是小易最少需要跳跃5次,就可以从4号石板跳到24号石板

输入描述:

输入为一行,有两个整数N,M,以空格隔开。 (4 ≤ N ≤ 100000) (N ≤ M ≤ 100000)

输出描述:

输出小易最少需要跳跃的步数,如果不能到达输出-1

示例1

输入:

4 24

输出:

5

解题分析:

【此题用到了动态规划,我会准备专门的文章去讲解这类题的解法,关注我一起手撕动态规划~~关注我】

题目的意思是从N开始,最少需要累加几步可以变成指定的数字M,每次累加的值为当前值的一个约数

 【解题思路】:
将1 - M个石板看做一个结果数组step,每个step[i]储存着从起点到这一步最小的步数,其中0为不能到达。 从起点开始对step进行遍历,先求i的所有约数(即从step[i]能走的步数),然后更新那几个能到达的位置的最小步数。如果不能到达则更新为此时位置的最小步数 + 1,如果是能到达的就更新为min(已记录的最小步数,此处的最小步数 + 1)),遍历一遍后得到结果。

一:动归五部曲分析题目:

1、step数组的含义:

step[i]储存着从起点到这一步最小的步数

2、确定递推公式
                    step[i+j]=Math.min(step[i+j],step[i]+1)
               或     step[i+j]=step[i]+1;
               

3、dp数组如何初始化

step[i]=Integer.MAX_VALUE;  初始化为最大值,方便后续更新

4、确定遍历顺序

从前往后顺序遍历,        for(int i=n;i<m;i++)

5、举例推导dp数组

如图上图所示的蓝色框里的n,(这里我就不单独写出来了)

二、注意:

1.约数的求解方法:

eg:12的约数

12 % i = 0 ,i 就是12的一个约数

for(int i=2;i*i<=num;i++){
    if(num%i==0){
            list.add(i);
        if(num/i!=i){
            list.add(num/i);
                }
        }
}

i  从 2 开始,是因为题目要求除了1和本身的约数

i *i <= num,是因为大于 根号下 num的数 ,都不可能被num整除

2.数组step存的是i位置最少需要跳跃的步数,

有两种情况:

当step[i+j]!=Integer.MAX_VALUE时,有不同的走法,取最小值更新step

达到step[i+j]==Integer.MAX_VALUE)时,再原来的最小步数上再走一步

 if(i+j<=m && step[i+j]!=Integer.MAX_VALUE){
                    step[i+j]=Math.min(step[i+j],step[i]+1);
                }else if(i+j<=m){
                    step[i+j]=step[i]+1;
                }

代码实现:

import java.util.Scanner;
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] step = new int[m + 1];   //记录最小步数
        for (int i = 0; i < m + 1; i++) {
            step[i] = Integer.MAX_VALUE;  // 把每一步先置为最大值,方便后面替换
        }
        step[n] = 0;
        for (int i = n; i < m; i++) {
            //当步数等于最大值的时候说明没有走这一步,直接跳过
            if (step[i] == Integer.MAX_VALUE) {
                continue;
            }
            
 // 求i的约数
            List<Integer> list = div(i);
            //遍历每个踩到的点的约数
            for (int j : list) {
//j代表此时我们一步可以条几个台阶

                if (i + j <= m && step[i + j] != Integer.MAX_VALUE) {
     //在跳到i+j位置的步数和跳到i的步数加1,之间取最小值,存到step数组中
                    step[i + j] = Math.min(step[i + j], step[i] + 1);
                } else if (i + j <= m) {
                    
                    step[i + j] = step[i] + 1;
                }
            }
        }


        if (step[m] == Integer.MAX_VALUE) {
            System.out.println(-1);
        } else {
            System.out.println(step[m]);
        }
    } 

    //求约数的方法
    public static List <Integer> div(int num) {
        List<Integer> list = new ArrayList<>();
        for (int i = 2; i * i <= num; i++) {
            if (num % i == 0) {
                list.add(i);
                if (num / i != i) {
                    list.add(num / i);
                }
            }
        } 
        return list;

    }
}

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

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

相关文章

一篇文章搞懂Docker、DockerCompose

文章目录1、初识Docker1.1、项目部署的问题1.2、Docker如何解决依赖的兼容问题的&#xff1f;1.3.Docker解决操作系统环境差异1.4、Docker如何解决不同系统环境的问题&#xff1f;1.5、小总结2、Docker 和虚拟机的区别3、Docker架构3.1、镜像和容器3.2、DockerHub3.3、Docker架…

2023年最强手机远程控制横测:ToDesk、向日葵、Airdroid三款APP免Root版本

前言 随着远程办公和远程协作的日益普及&#xff0c;跨设备、系统互通的远程控制软件已经成为职场人士不可或缺的工具之一。在国内&#xff0c;向日葵和ToDesk是最著名的远程控制软件&#xff1b;而在国外&#xff0c;则有微软远程桌面、AirDroid、TeamViewer、AnyDesk、Parse…

【移动端】fiddler配置及使用

文章目录安装配置桌面端配置移动端配置Android 手机上的配置苹果手机上的配置使用视图功能区域栏图标说明相关问题来源Fiddler是以代理web服务器的形式工作的&#xff0c;它使用代理地址:127.0.0.1&#xff0c;端口:8888。当Fiddler退出的时候它会自动注销&#xff0c;这样就不…

linux 消息队列 msgget/msgsnd/msgrecv

专栏内容&#xff1a;linux下并发编程个人主页&#xff1a;我的主页座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物&#xff0e;目录 前言 概述 原理 消息队列的大小 查看资源 接口 代码演示 结尾 前言 本专栏主要…

Git记录

Git日常命令 版本管理 git tag 删除本地tag git tag --delete v4.2.1推送本地标签 git push origin v4.2.1创建本地标签 git tag v4.2.1 分支管理 远程仓库地址管理 远程地址添加 意外着我可以将一个项目添加多个远程的仓库地址&#xff0c;只不过需要注意的一点就是git …

mysql数据表操作

1、alter 修改表名 : alter table 旧表名 rename as 新表名添加字段 : alter table 表名 add字段名 列属性[属性]修改字段 : alter table 表名 modify 字段名 列类型[属性]alter table 表名 change 旧字段名 新字段名 列属性[属性]删除字段 : alter table 表名 drop 字段名2、…

多目标柔性生产作业车间——反世代距离(IGD)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录反世代距离IGD概念收敛性能以及分布性能举例计算反世代距离IGD概念 反世代距离是一个综合性能的评价指标&#xff0c;主要是应用至求解多目标问题中&#xff0c;评价…

Java企业级开发学习笔记(2.3)利用MyBatis实现关联查询

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/ZVEZd】 文章目录一、创建数据库表1.1 创建教师表1.2 创建班级表1.3 创建学生表二、创建于数据库表对应的实体类2.1 创建教师实体类2.2 创建学生实体类2.3 创建班级实体类三、创建班级映射器配置文…

Leetcode394 字符串解码 递归和非递归

字符串解码 https://leetcode.cn/problems/decode-string/ 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效…

你搞清楚了吗?| GET请求方式的长度限制到底是多少?

目录 &#x1f4cd; 浏览器限制 &#x1f4cd; 服务器限制 在大多数人的一贯认识中&#xff0c;一直认为get请求方式有2048B的长度限制&#xff0c;其实这种说法是有失偏颇的&#xff0c;甚至可以说是错误的。 这个问题一直以来似乎是被N多人误解&#xff0c;其实Http Get方…

2.3-3单链表的查找

按位查找&#xff1a; so easy (1)边界情况 i0 没有循环&#xff0c;直接返回头节点 &#xff08;2&#xff09;如果i8 当不合法&#xff0c;返回NULL. (3)普通情况i3;(平均时间复杂度为O&#xff08;n&#xff09;) 进行封装&#xff1a;避免重复&#xff0c;更加简洁更…

CRYSTALS-Dilithium

文章目录简介1和2版本区别2和3的区别1.介绍1.1基本方法概述密钥生成算法签名过程验证1.2Dilithium实现注意事项安全性。基础操作环操作模约简。元素的大小NTT域表示2.3 HashingsignatureGenζ ← {0,1}256\{{0, 1\}}^{256}{0,1}256(ρ, ρ, K) ∈ {0,1}256\{{0, 1\}}^{256}{0,1…

【springBoot篇2】springBoot日志篇

目录 一、日志有什么作用 作用1&#xff1a;快速定位问题的所在之处(最主要) 作用2&#xff1a;记录用户的登录日志 作用3&#xff1a;记录系统的操作日志 作用4&#xff1a;记录方法的执行时间 二、日志怎样使用 ①先得到日志对象(slf4j的Logger对象) ​​​编辑 ②根…

Python 无监督学习实用指南:1~5

原文&#xff1a;Hands-on unsupervised learning with Python 协议&#xff1a;CC BY-NC-SA 4.0 译者&#xff1a;飞龙 本文来自【ApacheCN 深度学习 译文集】&#xff0c;采用译后编辑&#xff08;MTPE&#xff09;流程来尽可能提升效率。 不要担心自己的形象&#xff0c;只关…

docker运行服务端性能监控系统Prometheus和数据分析系统Grafana

文章目录一、Prometheus的安装和运行1、使用docker拉取镜像2、创建prometheus.yml文件3、启动容器4、查看启动是否成功5、记录安装过程中出现的错误二、Grafana的安装和运行1、使用docker拉取镜像2、创建grafana3、运行grafana4、查看grafana运行日志5、登录grafana一、Prometh…

学会了selenium 模拟鼠标操作,你就可以偷懒点点点了

目录&#xff1a;导读 前言 01.ActionChains 类常用方法 02.ActionChains 类所有方法 03.ActionChains 使用步骤 04.实战 05.总结 前言 我们在做 Web 自动化的时候&#xff0c;有时候页面的元素不需要我们点击&#xff0c;值需要把鼠标移动上去就能展示各种信息。 这个…

云服务器开启声音的办法

云服务器开启声音的办法 淘小云 云计算从业者&#xff0c;架构师 ​关注 云服务器没有声音是一件很烦恼的事情&#xff0c;那么今天小编给大家分享一下服务器开启声音的方法&#xff01; 首先您需要先拥有一台windows系统的云服务器&#xff0c;小编这里以腾讯云服务器为例…

( “树” 之 DFS) 687. 最长同值路径 ——【Leetcode每日一题】

687. 最长同值路径 给定一个二叉树的 root &#xff0c;返回 最长的路径的长度 &#xff0c;这个路径中的 每个节点具有相同值 。 这条路径可以经过也可以不经过根节点。 两个节点之间的路径长度 由它们之间的边数表示。 示例 1: 输入&#xff1a;root [5,4,5,1,1,5] 输出&…

Loki采集Mysql errorlog,你值得拥有的错误日志聚合系统

说到分布式日志存储系统&#xff0c;大家肯定对ELK、EFK这些工具并不陌生。可是它们都基于Elasticsearch存储&#xff0c;搭建复杂&#xff0c;耗资源&#xff0c;上手难。所以&#xff0c;个人非常推崇Grafana Labs开源的Loki 轻量级日志聚合分析系统 Loki使用标签来作为索引…

java maven学习

我本身是个前端&#xff0c;目前Java都算是自学&#xff0c;为了直接能做Java服务端开发&#xff0c;我其实很多基础都没学&#xff0c;直接上项目做东西。现在来补充常用maven。避免以后出现低级错误。 一、依赖拉不下来解决步骤 1. 检查网络&#xff08;最好检查&#xff09…