給定乙個非負整數,你可以交換兩個數字至多一次來獲得最大的合法的數。返回最大的合法的你能夠獲得的數。
給定的數字在 [0, 10^8] 內。
樣例1:
輸入: 2736
輸出: 7236
解釋: 交換數字2和數字7.
樣例2:
輸入: 9973
輸出: 9973
解釋: 不用交換.
解題的時候舉了幾個例子考慮這道題的搜尋域。暴力搜尋肯定是o(n^2)複雜度沒問題。
但是事實上o(n)就可以。建了乙個表從低位往高位掃瞄到每個位置的最大值,然後從高位往低位掃瞄比當前位置最大值小的位置。(有點繞,直接上**)
class solution
int size = numbers.size();
reverse(numbers.begin(), numbers.end());
int mx = int_min;
for(int i=size-1; i>=0; i--)
else
}int res = num;
for(int i=0; i}
return res;
}};
Lintcode 最大矩形
類似於蓄水池問題,首先創造乙個矩形,記錄每一列上true的數量。1,1,0,0,1 0,1,0,0,1 0,0,1,1,1 0,0,1,1,1 0,0,0,0,1 可轉換為 1,1,0,0,1 0,2,0,0,2 0,0,1,1,3 0,0,2,2,4 0,0,0,0,5 第一種方案 a i j m...
lintcode最大子陣列
最大子陣列 給定乙個整數陣列,找到乙個具有最大和的子陣列,返回其最大和。注意事項 子陣列最少包含乙個數 您在真實的面試中是否遇到過這個題?yes 樣例給出陣列 2,2,3,4,1,2,1,5,3 符合要求的子陣列為 4,1,2,1 其最大和為6 挑戰 要求時間複雜度為o n 標籤 相關題目 分析 這...
LINTCODE 最大子陣列III
lintcode 最大子陣列iii 思路 動態規劃的方法,記mustthelast i j 為在前i個數中分成j段,且第j段必須有第i個數的最大值,notthelast i j 為前i個中分成j段,且第j段不一定含有第i個數的最大值 注意初始化的資料,不能全部初始化為0,不然在全部為負整數以及一些其...