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...