欢迎光临散文网 会员登陆 & 注册

1736 替换隐藏数字得到的最晚时间

2023-05-01 22:18 作者:目标力扣Knight  | 我要投稿

1736 替换隐藏数字得到的最晚时间

方法一:贪心 + 模拟

time 字符数组中的问号 ?代表可以填写任意数字,在求得最晚时间时,不管问号出现在哪一个时间位,不管出现几次,我都试图取得该位置以及关联位置【时间的组成方式】的最大时间

分别使用四个变量,初值为其字符数组中对应位置的值,操作上按照特判 + 覆写的基本思路

分别判断第一位,第二位,第四位与第五位,其中后两位无需特别处置,进制分别为6和10,分钟进制为60;

后两位如果为问号,则直接赋予每个位上最大值;

前两位中,先按照贪心的思路,当第一位为问号则赋予最大值2,否则不处理。暂不考虑第二位;

分别考虑第二位为问号或者为数值时,根据第一位确定第二位的值,和根据第二位覆写第一位的值;

Python版本

C++版本

复杂度分析

  • 时间复杂度:O(1)。

  • 空间复杂度:O(1)。

备注【代码优化过程】

代码优化思路:充分利用默认值,减少代码覆写

逻辑合并,更多地使用三元运算符

思维缺陷:顺序思维,没有考虑到小时中,第一位和第二位的关联性,即24进制,2进制和10进制对两个数位的数值上限限制


V1

不足: 顺序思考存在缺陷—>没有充分利用默认值,造成代码冗余

没通过的测试样例 "?4:03" 预期输出 "14:03", 实际输出 "24:03",

当第二位为确值,而第一位为任意值时,没能处理好超限,因为第二位如果大于3,第一位最大为1



V2


WA: "00:01", 预期答案:"20:01", 实际输出 "00:01"

出错原因:当第二位非任意值时,没有判断第一位是否为任意值,直接将其赋值为2;

        




V3

逻辑增加:

逻辑增加:当第二位为数字时,如果第一位恰好为问号,那么我们在判断第一位为问号时,所作修改时,直接改为最大的2.当遍历到第二位,且第二位本身为数值,第一位为任意值时,就需要跟随第二位而变动第一位

具体而言,如果第二位大于3,则第一位只能填写1,其他则可以填写2

 



V4


优化:直接使用字符,字符间减法,无需类型转换

WA: "00:01", 预期结果: "00:01", 实际结果: "10:01",

原因:字符类型转整数类型错误,逻辑错误,

当第二位不是问号时,应该判断第一位是否为问号,如果是问号,则直接赋值为2,否则赋值为1 其次,当第二位为问号时,应当判断第一位的状态,因为率先判断第一位是否为问号并且完成赋值,因此当前轮次判断第二位为问号时,应当以第一位的数值为基准,而不是time[0],如果以后者作为判断条件

那么第一轮的判断需要重新判断

 



V4 代码优化


优化点:初始化时已经读取了对应位序的字符,如果当前非任意字符或者其他条件时,才需要对默认值进行修改

优点:利用初始化,减少代码量

 



V5 代码优化【ChatGPT】

优化:逻辑合并

对于小时的组合,当 value| ‘?’,只有23和 1/0 | 9两种组合,可以使用三元运算符表达

对于小时的组合,当 ‘?’ | value, 只有1 | n(n > 3) 和 2 | n(n=1,2,3),两种组合

 





1736 替换隐藏数字得到的最晚时间的评论 (共 条)

分享到微博请遵守国家法律