100256. 替换字符可以得到的最晚时间
给你一个字符串 s
,表示一个 12 小时制的时间格式,其中一些数字(可能没有)被 "?"
替换。
12 小时制时间格式为 "HH:MM"
,其中 HH
的取值范围为 00
至 11
,MM
的取值范围为 00
至 59
。最早的时间为 00:00
,最晚的时间为 11:59
。
你需要将 s
中的 所有 "?"
字符替换为数字,使得结果字符串代表的时间是一个 有效 的 12 小时制时间,并且是可能的 最晚 时间。
返回结果字符串。
示例 1:
输入: s = "1?:?4"
输出: "11:54"
解释: 通过替换 "?"
字符,可以得到的最晚12小时制时间是 "11:54"
。
示例 2:
输入: s = "0?:5?"
输出: "09:59"
解释: 通过替换 "?"
字符,可以得到的最晚12小时制时间是 "09:59"
。
提示:
s.length == 5
s[2]
是字符":"
- 除
s[2]
外,其他字符都是数字或"?"
- 输入保证在替换
"?"
字符后至少存在一个介于"00:00"
和"11:59"
之间的时间。
class Solution {
public String findLatestTime(String s) {
String ss="";
if(s.charAt(0)=='?'){
if(s.charAt(1)=='?'){
ss="11:";
}else if(s.charAt(1)-'0'<=1){
ss="1"+String.valueOf(s.charAt(1))+":";
} else{
ss="0"+String.valueOf(s.charAt(1))+":";
}
}
if(s.charAt(0)!='?'){
if(s.charAt(0)=='0'){
if(s.charAt(1)=='?'){
ss="09:";
}else{
ss="0"+String.valueOf(s.charAt(1))+":";
}
}
if(s.charAt(0)=='1'){
if(s.charAt(1)=='?'){
ss="11:";
}else{
ss="1"+String.valueOf(s.charAt(1))+":";
}
}
}
if(s.charAt(3)=='?'){
ss+="5";
}else{
ss+=String.valueOf(s.charAt(3));
}
if(s.charAt(4)=='?'){
ss+="9";
}else{
ss+=String.valueOf(s.charAt(4));
}
return ss;
}
}
100265. 素数的最大距离
给你一个整数数组 nums
。
返回两个(不一定不同的)素数在 nums
中 下标 的 最大距离。
示例 1:
输入: nums = [4,2,9,5,3]
输出: 3
解释: nums[1]
、nums[3]
和 nums[4]
是素数。因此答案是 |4 - 1| = 3
。
示例 2:
输入: nums = [4,8,2,8]
输出: 0
解释: nums[2]
是素数。因为只有一个素数,所以答案是 |2 - 2| = 0
。
提示:
1 <= nums.length <= 3 * 105
1 <= nums[i] <= 100
- 输入保证
nums
中至少有一个素数。
class Solution {
public static int maximumPrimeDifference(int[] nums) {
int left=-1,right=nums.length;
for(int i=0;i<nums.length;i++){
if(res(nums[i])){
left=i;
break;
}
}
for(int j=nums.length-1;j>=0;j--){
if(res(nums[j])){
right=j;
break;
}
}
if(left!=-1&&right!=nums.length){
return right-left;
}else{
return 0;
}
}
public static boolean res(int n){
int i=0;
for(i=2;i<n;i++){
if(n%i==0){
return false;
}
}
if(n==i){
return true;
}else{
return false;
}
}
}
后两题都是hard,就不写了,面对简单题我重拳出击,面对中等题我努力思考,面对hard题我复制黏贴。
另外第二道算法题可以再优化一下,判断素数那一个方法可以再优化一下,循环次数降为n/2,还有for的循环次数,可以优化为一个for循环,left<right。