累加和為aim的最長子陣列

2021-10-04 04:35:02 字數 934 閱讀 7461

參考:

擴充套件1乙個陣列中要麼是奇數,要麼是偶數,求奇數和偶數相等的最長子陣列。

思路用1表示奇數,用-1表示偶數,那麼就是求累加和為0的最長子陣列,參考上面

擴充套件2求乙個陣列怎樣劃分可以使得子陣列異或為0的個數最多。

思路動態規劃:

定義乙個dp陣列,dp[ i ]表示以 i 結尾可以劃分的最多個數

對於第i個數的怎麼求出呢:

1.當i-1最後子數異或和不為0時,dp[i] = dp[i-1]

2.當i-1為最後異或和時,dp[i] = dp[k-1]+1, k為上次距離i-1最近的一組異或和的

異或和用map來儲存,遍歷到乙個數,異或它,求異或後的數在map中最近的索引位置,因為0異或這個數還是這個數。

public

intmosteor

(int

arr)

int eor =0;

int[

] dp =

newint

[arr.length]

; map map =

new hashmap<

>()

; map.

put(0,

-1);

dp[0]

= arr[0]

==0?1

:0; map.

put(dp[0]

,0);

for(

int i =

1; i < arr.length; i++

) dp[i]

= math.

max(dp[i]

, dp[i-1]

);map.

put(dp[i]

, i);}

return dp[dp.length-1]

;}

和為aim的最長子陣列長度

求在給定的陣列中,子陣列中所有數加起來的和等於固定值 aim 的最長子陣列長度。準備乙個字典,key是從 1 位置到當前位置的累加和,value 是第一次得到這個累加和的位置。預設 1 位置的累加和是0.從頭開始遍歷陣列,每次都計算從 1 位置到當前位置的累加和是多少,並將位置資訊和 累加和存到字典...

子陣列累加和為aim 小於等於aim 的三個問題

子陣列累加和為aim 小於等於aim 的三個問題 累加和等於aim的最長子陣列的長度 陣列可 0 這道題我另有文章講解了,這裡就不多說了 累加和等於aim的最長子陣列的長度 陣列只有正數 這個和上面唯一的不同就是陣列中只有正數,這裡使用類似視窗移動的做法,給出兩個指標,l,r表示視窗的左右邊界 su...

演算法 求陣列中累加和為定值的最長子陣列

o n n 的演算法,我想大家都應該很瞭如指掌,那我們就講一種o n 的演算法,借助map巧妙地解決。主要在思想上,其實很簡潔 後面有類似思想拓展題。演算法思想 我們準備乙個map來完成記錄操作。map的意義是從開始累加到i位置的和為sum的時候,此時陣列的下標i。且sum必須是新出現的。初始的時候...