給出乙個陣列,給出乙個x值,要求在陣列中能夠找到元素加起來的和是x的倍數,要求出最大能夠得到的倍數
首先自然是暴力解法
做的時候我嘗試用遞迴去解決,但是超時了。
做的時候想到的另乙個方法是動態規劃,不過沒深想,我動歸的實踐能力還是弱了些。
事後和被人討論,有人給出了乙個解法,就是先加上陣列中大於零的所有數得到temp_sum
,然後將所有數變為負數,再遍歷看加哪些可以得到結果,我覺得這個思路很好,不過這裡主要要解決的問題就是最後如何加這些負數。我的想法是計算x的倍數,找到剛好比當前和temp_sum
大的倍數,然後這個問題就變成了「尋找陣列中和為目標值」的問題。
將這個子問題按照1個數、2個數...不斷增加的去遍歷,得到最終答案。
除了將原問題轉化為子問題,還有種思路是對負數陣列進行公升序排序。
總的來說,動歸應該是最理想的做法。
#include #include using namespace std;
int n;
vectorarr;
int mn = 0;
int x;
void findmax(int i, int a)
int main()
// n = 5; x = 7;
// arr = ;
findmax(0, 0);
cout << mn;
return 0;
}
還沒做
還沒做
序列元素和是k的倍數的最大子串長度
給乙個定長的元素集,求子串中元素和是k的倍數的最大子串長度。輸入第一行數序列長度,輸入第二行是序列各元素值,第三行是整數k 輸出序列元素子串和是k倍數的最大長度 分析 1.元素子串是否都能考慮到,兩層迴圈就可以窮舉 2.字串和計算,並不停比對是否是k倍數,若是記錄子串長度 3.輸出最長子串長度 pu...
求非負元素陣列所有元素能組合的最大字串
首發於 樊浩柏科學院 問題敘述 將乙個非負元素陣列中的所有元素排列組合在一起,找出值最大的那個排列情況。例如 0,9,523,94,10,4 排列組合後值最大數為 9945234100。本文廢話較多,可以直接跳轉到 編碼實現 部分。這是我遇到的一道筆試題。首次遇見我也是很懵,當時我的第一感覺就是排序...
求元素和最大的子陣列
1.題目要求 任意給出乙個整數的陣列,求出元素和最大的子陣列的和。要求時間複雜度為n。2.解析題目要求 要求出乙個陣列的最大子陣列和,若要求時間複雜度為n 則可一一求出,再求其最大值,利用兩次迴圈即可。但是若要求時間複雜度為n,只能進行一次遍歷,這便是難點所在。關鍵點在於負數,若全為正數,那麼顯然最...