目录
一.题目
1.题目详情
给你一个字符串 s
,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。
示例 1:
输入:s = "Hello" 输出:"hello"
709. 转换成小写字母 - 力扣(Leetcode)https://leetcode.cn/problems/to-lower-case/description/ 2.题目详情
你正在参加一场比赛,给你两个 正 整数 initialEnergy
和 initialExperience
分别表示你的初始精力和初始经验。
另给你两个下标从 0 开始的整数数组 energy
和 experience
,长度均为 n
。
你将会 依次 对上 n
个对手。第 i
个对手的精力和经验分别用 energy[i]
和 experience[i]
表示。当你对上对手时,需要在经验和精力上都 严格 超过对手才能击败他们,然后在可能的情况下继续对上下一个对手。
击败第 i
个对手会使你的经验 增加 experience[i]
,但会将你的精力 减少 energy[i]
。
在开始比赛前,你可以训练几个小时。每训练一个小时,你可以选择将增加经验增加 1 或者 将精力增加 1 。
要求:返回击败全部 n
个对手需要训练的 最少 小时数目。
示例 1:
输入:initialEnergy = 5, initialExperience = 3, energy = [1,4,3,2], experience = [2,6,3,1] 输出:8 解释:在 6 小时训练后,你可以将精力提高到 11 ,并且再训练 2 个小时将经验提高到 5 。 按以下顺序与对手比赛: - 你的精力与经验都超过第 0 个对手,所以获胜。 精力变为:11 - 1 = 10 ,经验变为:5 + 2 = 7 。 - 你的精力与经验都超过第 1 个对手,所以获胜。 精力变为:10 - 4 = 6 ,经验变为:7 + 6 = 13 。 - 你的精力与经验都超过第 2 个对手,所以获胜。 精力变为:6 - 3 = 3 ,经验变为:13 + 3 = 16 。 - 你的精力与经验都超过第 3 个对手,所以获胜。 精力变为:3 - 2 = 1 ,经验变为:16 + 1 = 17 。 在比赛前进行了 8 小时训练,所以返回 8 。 可以证明不存在更小的答案。
二.解题思路(第一个在题后语里)
1.因为精力在每回合中都会减少,所有在开始前可以先判断是否需要训练精力,需要多少精力。
2.通过循环进行回合,判断是否需要训练经验
3.最后回合结束时只需要对经验进行操作
三.代码
1.转换成小写字母
class Solution {//709. 转换成小写字母
public String toLowerCase(String s) {
return s.toLowerCase();
}
}
2. 赢得比赛需要的最少训练时长
class Solution {
public int minNumberOfHours(int initialEnergy, int initialExperience, int[] energy, int[] experience) {
int len=energy.length;
int Senergrt = 0;
int time=0;
for(int i=0;i<len;i++)Senergrt+=energy[i];//需要过关的精力总和
if(initialEnergy<=Senergrt){//判断是否需要训练精力
time+=(Senergrt-initialEnergy+1);
initialEnergy=Senergrt+1;
}
for(int i=0;i<len;i++){
if(initialExperience<=experience[i]){//判断是否需要训练经验
if(initialExperience<=experience[i]){
time+=(experience[i]-initialExperience+1);
initialExperience+=(experience[i]-initialExperience+1);
}
}
initialExperience+=experience[i];
}
return time;
}
}
class Solution {//这是比较符合提议的版本
public int minNumberOfHours(int initialEnergy, int initialExperience, int[] energy, int[] experience) {
int time=0;
for(int i=0;i<energy.length;i++){
if(initialEnergy<=energy[i]){//判断是否需要训练精力
time+=(energy[i]-initialEnergy+1);
initialEnergy+=(energy[i]-initialEnergy+1);
}
if(initialExperience<=experience[i]){
if(initialExperience<=experience[i]){//判断是否需要训练经验
time+=(experience[i]-initialExperience+1);
initialExperience+=(experience[i]-initialExperience+1);
}
}
//回合结束时数值变更
initialEnergy-=energy[i];
initialExperience+=experience[i];
}
return time;
}
}
四.题后语(
)
第一题直接使用character中转换为小写的方法就ok了。第二题拿到手,我将其分为三部分来完成;第一部分:游戏开始前,即精力是否满足完成一整场游戏;第二部分:回合开始前,对每一回合的经验进行操作,即经验是否满足完成这一回合的游戏;第三部分:回合结束后,对每一回合的经验进行操作,即对经验进行增加。代码写完后提交没有问题,都是感觉有那么一点点不符合题目的原意,就对代码进行了一点点的修改,即第二版本的代码。