第123場周賽

2021-09-10 20:12:04 字數 1616 閱讀 7574

1,989.陣列形式的整數加法

方法一:逐位相加

思路

讓我們逐位將數字加在一起。舉乙個例子,如果要計算 123 與 912 的和。我們順次計算 3+2、2+1、1+9。任何時候,當加法的結果大於等於 10 ,我們要將進製的 1 加入下一位的計算中去,所以最終結果等於 1035。

演算法

我們可以對以上的想法做乙個小變化,讓它實現起來更容易 —— 我們將整個加數加入陣列表示的數的最低位。

繼續之前的例子 123+912,我們把它表示成 [1, 2, 3+912]。然後,我們計算 3+912 = 915。5 留在當前這一位,將 910/10=91 以進製的形式加入下一位。

然後,我們再重複這個過程,計算 [1, 2+91, 5]。我們得到 93,3 留在當前位,將 90/10=9 以進製的形式加入下一位。繼而又得到 [1+9, 3, 5],重複這個過程之後,最終得到結果 [1, 0, 3, 5]。

class solution 

reverse(ans.begin(),ans.end());

return ans;

}};

2,990.等式方程的可滿足性(深度優先遍歷)

方法一:聯通分量

思路

所有相互等於的變數能組成乙個聯通分量。舉乙個例子,如果a=b, b=c, c=d,那麼a, b, c, d就在同乙個聯通分量中,因為它們必須相等。

演算法

第一步,我們基於給定的等式,用深度優先遍歷將每乙個變數按照聯通分量染色。

將聯通分量染色之後,我們分析形如a != b的不等式。如果兩個分量有相同的顏色,那麼它們一定相等,因此如果說它們不相等的話,就一定無法滿足給定的方程組。

否則,我們的染色就可以看作是一組能滿足方程組約束的方案,所以結果是 true。

class solution 

}vectorcolor(26);

int t=0;

for(int start=0;start<26;start++)}}

}}

for(string eqn:equations)

}return true;

}};

3,991.壞了的計算器(貪心)

方法一:逆向操作

思路

除了對x執行乘 2 或 減 1 操作之外,我們也可以對y執行除 2(當y是偶數時)或者 加 1 操作。

這樣做的動機是我們可以總是貪心地執行除 2 操作:

演算法

y大於x時,如果它是奇數,我們執行加法操作,否則執行除法操作。之後,我們需要執行x - y次加法操作以得到x

class solution 

return ans+x-y;

}};

第191場周賽

class solution return res 這裡有個注意的點,maxh maxw這兩個int的值的乘積會超過int的範圍,所以要先轉換為double class solution maxh maxh h horizontalcuts hcut 1 maxh h horizontalcuts ...

第193場周賽

class solution return res class solution map maps new treemap int len arr.length int max 1 for int i 0 i else int totoalnum maps.size arraylist sorted...

第 195 213 場周賽

195 213周賽也陸續在堅持著,只是沒在部落格中做記錄,後面將他們都補上,這個可是我今年一直在堅持做的事情,不記錄倒是可惜了,雖然比賽打得不怎麼樣,好歹一直也努力著。class solution system.out.println start start if start len for int...