1.牛牛的快递
题目链接:牛牛的快递_牛客题霸_牛客网
public static void main(String[] args){
Scanner in = new Scanner(System.in);
double a = in.nextDouble();
char c = in.next().charAt(0);
int ret = 0;
if(a <= 1){
ret = 20;
}if(a > 1){
ret = 20 + (int) Math.ceil(a - 1);
}
if(c == 'y'){
ret += 5;
}
System.out.println(ret);
}
2.最小花费爬楼梯
题目链接:最小花费爬楼梯_牛客题霸_牛客网
要走到dp[i]的位置:
要么花最少得钱走到 i- 2 再从i - 2 位置花费 cost[i - 2] 走到 dp[i] ;
要么花最少得钱走到 i - 1 再从 i - 1 位置花费 cost[i - 1] 走到 dp[i]
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] cost = new int[n];
int[] dp = new int[n + 1];//可能走到 n + 1
for (int i = 0; i < n; i++) {
cost[i] = sc.nextInt();
}
//0 和 1 都可能是最开始的位置 所以我们是从 2 位置开始收费的
for (int i = 2; i <= n ; i++) {
dp[i] = Math.min(dp[i - 2] + cost[i - 2],dp[i -1] + cost[i - 1]);
}
System.out.println(dp[n]);
}
3.数组中两个字符串的最小距离
题目链接:数组中两个字符串的最小距离__牛客网
题目解析:
首先: 我们遍历给出的字符串找到第一个出现str1 或者 str2 的位置,同时我们再创建两个变量 prev1 和 prev2,prev1 存放 str1 所在的位置 prev2 存放 str2 所在的位置
接着我们在第一次出现str1 或者 第一次出现 str2 的位置的右边查看是否有 str2 或者 str1,如果有的话 prev2 和 prev1 存放该位置 再把 prev1 存放的位置和 prev2 存放的位置进行相减存放在ret中
最后再进行遍历找到第二次出现 str1 或者 str2 的位置 在prev中存放新的位置值 再进行相减
public static void main(String[] args) throws IOException {
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,ret = 0x3f3f3f;
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 == 0x3f3f3f ? -1 : ret );
}