1736 替換隱藏?cái)?shù)字得到的最晚時(shí)間

方法一:貪心 + 模擬
time 字符數(shù)組中的問(wèn)號(hào) ?
代表可以填寫任意數(shù)字,在求得最晚時(shí)間時(shí),不管問(wèn)號(hào)出現(xiàn)在哪一個(gè)時(shí)間位,不管出現(xiàn)幾次,我都試圖取得該位置以及關(guān)聯(lián)位置【時(shí)間的組成方式】的最大時(shí)間
分別使用四個(gè)變量,初值為其字符數(shù)組中對(duì)應(yīng)位置的值,操作上按照特判 + 覆寫的基本思路
分別判斷第一位,第二位,第四位與第五位,其中后兩位無(wú)需特別處置,進(jìn)制分別為6和10,分鐘進(jìn)制為60;
后兩位如果為問(wèn)號(hào),則直接賦予每個(gè)位上最大值;
前兩位中,先按照貪心的思路,當(dāng)?shù)谝晃粸閱?wèn)號(hào)則賦予最大值2
,否則不處理。暫不考慮第二位;
分別考慮第二位為問(wèn)號(hào)或者為數(shù)值時(shí),根據(jù)第一位確定第二位的值,和根據(jù)第二位覆寫第一位的值;
Python版本
C++版本
復(fù)雜度分析
時(shí)間復(fù)雜度:O(1)。
空間復(fù)雜度:O(1)。
備注【代碼優(yōu)化過(guò)程】
代碼優(yōu)化思路:充分利用默認(rèn)值,減少代碼覆寫
邏輯合并,更多地使用三元運(yùn)算符
思維缺陷:順序思維,沒(méi)有考慮到小時(shí)中,第一位和第二位的關(guān)聯(lián)性,即24進(jìn)制,2進(jìn)制和10進(jìn)制對(duì)兩個(gè)數(shù)位的數(shù)值上限限制
V1
不足: 順序思考存在缺陷—>沒(méi)有充分利用默認(rèn)值,造成代碼冗余
沒(méi)通過(guò)的測(cè)試樣例 "?4:03"
預(yù)期輸出 "14:03"
, 實(shí)際輸出 "24:03"
,
當(dāng)?shù)诙粸榇_值,而第一位為任意值時(shí),沒(méi)能處理好超限,因?yàn)榈诙蝗绻笥?,第一位最大為1
V2
WA: "00:01", 預(yù)期答案:"20:01", 實(shí)際輸出 "00:01"
出錯(cuò)原因:當(dāng)?shù)诙环侨我庵禃r(shí),沒(méi)有判斷第一位是否為任意值,直接將其賦值為2;
? ? ? ??
V3
邏輯增加:
邏輯增加:當(dāng)?shù)诙粸閿?shù)字時(shí),如果第一位恰好為問(wèn)號(hào),那么我們?cè)谂袛嗟谝晃粸閱?wèn)號(hào)時(shí),所作修改時(shí),直接改為最大的2.當(dāng)遍歷到第二位,且第二位本身為數(shù)值,第一位為任意值時(shí),就需要跟隨第二位而變動(dòng)第一位
具體而言,如果第二位大于3,則第一位只能填寫1,其他則可以填寫2
?
V4
優(yōu)化:直接使用字符,字符間減法,無(wú)需類型轉(zhuǎn)換
WA: "00:01", 預(yù)期結(jié)果: "00:01", 實(shí)際結(jié)果: "10:01",
原因:字符類型轉(zhuǎn)整數(shù)類型錯(cuò)誤,邏輯錯(cuò)誤,
當(dāng)?shù)诙徊皇菃?wèn)號(hào)時(shí),應(yīng)該判斷第一位是否為問(wèn)號(hào),如果是問(wèn)號(hào),則直接賦值為2,否則賦值為1 其次,當(dāng)?shù)诙粸閱?wèn)號(hào)時(shí),應(yīng)當(dāng)判斷第一位的狀態(tài),因?yàn)槁氏扰袛嗟谝晃皇欠駷閱?wèn)號(hào)并且完成賦值,因此當(dāng)前輪次判斷第二位為問(wèn)號(hào)時(shí),應(yīng)當(dāng)以第一位的數(shù)值為基準(zhǔn),而不是time[0],如果以后者作為判斷條件
那么第一輪的判斷需要重新判斷
?
V4 代碼優(yōu)化
優(yōu)化點(diǎn):初始化時(shí)已經(jīng)讀取了對(duì)應(yīng)位序的字符,如果當(dāng)前非任意字符或者其他條件時(shí),才需要對(duì)默認(rèn)值進(jìn)行修改
優(yōu)點(diǎn):利用初始化,減少代碼量
?
V5 代碼優(yōu)化【ChatGPT】
優(yōu)化:邏輯合并
對(duì)于小時(shí)的組合,當(dāng) value| ‘?’
,只有23和 1/0 | 9兩種組合,可以使用三元運(yùn)算符表達(dá)
對(duì)于小時(shí)的組合,當(dāng) ‘?’ | value
, 只有1 | n(n > 3) 和 2 | n(n=1,2,3)
,兩種組合
?