JAVA算法刷题---DAY2 牛牛的快递、最小花费爬楼梯、数组中两个字符串的最小距离
本系列可作为JAVAEE初阶学习系列的笔记,文中提到的一些练习的代码,小编会将代码复制下来,大家复制下来就可以练习了,方便大家学习。
点赞关注不迷路!您的点赞、关注和收藏是对小编最大的支持和鼓励!
系列文章目录
JAVA初阶---------已更完
JAVA数据结构---------已更完
数据库初阶----------已更完
JAVA EE初阶---------正在更新
JAVA算法刷题---DAY1 数字统计、两个数组的交集、点击消除
JAVA算法刷题---DAY2 牛牛的快递、最小花费爬楼梯、数组中两个字符串的最小距离
目录
目录
系列文章目录
目录
前言
1.数字统计
描述
输入描述:
输出描述:
示例1
示例2
2.最小花费爬楼梯
描述
输入描述:
输出描述:
示例1
示例2
3.数组中两个字符串的最小距离
描述
输入描述:
输出描述:
示例1
示例2
备注:
总结
前言
小编作为新晋码农一枚,会定期整理一些写的比较好的代码,作为自己的学习笔记,会试着做一下批注和补充,如转载或者参考他人文献会标明出处,非商用,如有侵权会删改!欢迎大家斧正和讨论!
1.数字统计
题目链接:牛牛的快递_牛客题霸_牛客网
描述
牛牛正在寄快递,他了解到快递在 1kg 以内的按起步价 20 元计算,超出部分按每 kg 1元计算,不足 1kg 部分按 1kg计算。如果加急的话要额外付五元,请问牛牛总共要支付多少快递费
输入描述:
第一行输入一个单精度浮点数 a 和一个字符 b ,a 表示牛牛要寄的快递的重量,b表示牛牛是否选择加急,'y' 表示加急 ,'n' 表示不加急。
输出描述:
输出牛牛总共要支付的快递费用
示例1
输入:
1.5 y
复制输出:
26
示例2
输入:
0.7 n
复制输出:
20
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); double a= in.nextDouble(); char b=in.next().charAt(0); int ret=0; if(a<1){ ret=20; }else{ ret=20+(int)Math.ceil(a-1); } if(b=='y'){ ret+=5; } System.out.println(ret); } }2.最小花费爬楼梯
题目链接:最小花费爬楼梯_牛客题霸_牛客网
描述
给定一个整数数组 cost cost ,其中 cost[i] cost[i] 是从楼梯第i i 个台阶向上爬需要支付的费用,下标从0开始。一旦你支付此费用,即可选择向上爬一个或者两个台阶。
你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。
请你计算并返回达到楼梯顶部的最低花费。
数据范围:数组长度满足 1≤n≤105 1≤n≤105 ,数组中的值满足 1≤costi≤104 1≤costi≤104
输入描述:
第一行输入一个正整数 n ,表示数组 cost 的长度。
第二行输入 n 个正整数,表示数组 cost 的值。
输出描述:
输出最低花费
示例1
输入:
3 2 5 20
复制输出:
5
复制说明:
你将从下标为1的台阶开始,支付5 ,向上爬两个台阶,到达楼梯顶部。总花费为5
示例2
输入:
10 1 100 1 1 1 90 1 1 80 1
复制输出:
6
复制说明:
你将从下标为 0 的台阶开始。 1.支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。 2.支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。 3.支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。 4.支付 1 ,向上爬一个台阶,到达下标为 7 的台阶。 5.支付 1 ,向上爬两个台阶,到达下标为 9 的台阶。 6.支付 1 ,向上爬一个台阶,到达楼梯顶部。 总花费为 6 。
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner in=new Scanner(System.in); int n=in.nextInt(); int[] cost=new int[n]; int[] dp=new int[n+1]; for(int i=0;i<n;i++){ cost[i]=in.nextInt(); } if (n == 1) { System.out.println(cost[0]); return; } for(int i=2;i<=n;i++){ dp[i]=Math.min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]); } System.out.println(dp[n]); } }3.数组中两个字符串的最小距离
题目链接:数组中两个字符串的最小距离_牛客题霸_牛客网
描述
给定一个字符串数组strs,再给定两个字符串str1和str2,返回在strs中str1和str2的最小距离,如果str1或str2为null,或不在strs中,返回-1。
输入描述:
输入包含有多行,第一输入一个整数n(1≤n≤105)(1≤n≤105),代表数组strs的长度,第二行有两个字符串分别代表str1和str2,接下来n行,每行一个字符串,代表数组strs (保证题目中出现的所有字符串长度均小于等于10)。
输出描述:
输出一行,包含一个整数,代表返回的值。
示例1
输入:
1 CD AB CD
复制输出:
-1
示例2
输入:
5 QWER 666 QWER 1234 qwe 666 QWER
复制输出:
1
备注:
时间复杂度O(n),额外空间复杂度O(1)
import java.util.*; import java.io.*; public class Main{ public static void main(String[] args) throws Throwable{ BufferedReader reader=new BufferedReader(new InputStreamReader(System.in)); int n=Integer.parseInt(reader.readLine()); String[] str=reader.readLine().split(" "); String s1=str[0],s2=str[1]; int prev1=-1,prev2=-1; int ret=0X3f3f3f3f; for(int i=0;i<n;i++){ String s=reader.readLine(); if(s.equals(s1)){ if(prev2!=-1){ ret=Math.min(ret,i-prev2); } prev1=i; } else if(s.equals(s2)){ if(prev1!=-1){ ret=Math.min(ret,i-prev1); } prev2=i; } } System.out.println(ret==0X3f3f3f3f?-1:ret); } }总结
以上就是今天要讲的内容,本文简单记录了算法刷题内容,仅作为一份简单的笔记使用,大家根据注释理解,您的点赞关注收藏就是对小编最大的鼓励!
