LeetCode 輸出整體輪廓線和最長子陣列長度

2021-10-01 13:18:37 字數 2227 閱讀 8816

輸出整體輪廓線

返回最長子陣列長度

求陣列中奇數和偶數個數相同的最長子陣列

給定乙個n行3列二維陣列, 每一行表示有一座大樓, 一共有n座大樓。 所有大樓的底部都坐落在x軸上, 每一行的三個值(a,b,c)代表每座大樓的從(a,0)點開始, 到 (b,0)點結束, 高度為c。 輸入的資料可以保證a例子: 給定乙個二維陣列 [ [1, 3, 3], [2, 4, 4], [5, 6,1] ]

輸出為輪廓線 [ [1, 2, 3], [2, 4, 4], [5, 6, 1] ]

public

static

class

node

}public

static

class

nodecomparator

implements

comparator

if(o1.isup != o2.isup)

return0;

}}public

static list

>

buildingoutline

(int

buildings)

arrays.

sort

(nodes,

newnodecomparator()

);treemap

htmap =

newtreemap

<

>()

; treemap

pmmap =

newtreemap

<

>()

;for

(int i =

0; i < nodes.length; i++

)else

}else

else}}

if(htmap.

isempty()

)else

} list

> res =

newarraylist

<

>()

;int start =0;

int height =0;

for(entry

entry : pmmap.

entryset()

) start = curposition;

height = curmaxheight;}}

return res;

}

題目描述:給定乙個陣列arr, 和乙個整數num, 求在arr中, 累加和等於num的最長子陣列的長度

例子:arr = num = 7

其中有很多的子陣列累加和等於7, 但是最長的子陣列是, 所以返回其長度4

題解:建立乙個hashmap,key儲存從0位置開始到每個位置的長度,value 儲存出現長度的位置。如果sum-aim的結果出現在map中,則說明有這個長度,獲取長度即可。如果沒有出現過,儲存在 map 中即可。

public

static

intmaxlength

(int

arr,

int aim)

hashmap

map =

newhashmap

(); map.

put(0,

-1);

// important

int len =0;

int sum =0;

for(

int i =

0; i < arr.length; i++)if

(!map.

containskey

(sum))}

return len;

}

用動態劃分思想,最後乙個位置的數肯定會被劃分,那麼就有兩種可能

最後乙個數所在部分不是異或和為 0 的子陣列,那麼 dp[i] = dp[i-1]

最後乙個數所在部分是異或和為 0 的子陣列,那麼 dp[i] = dp[k-1] +1

public

static

intmosteor

(int

arr)

if(i >0)

map.

put(xor, i)

; ans = math.

max(ans, dp[i]);

}return ans;

}

大樓輪廓線

輸入第一行乙個數表示有n座大樓,後面依次輸入n行,每一行表示大樓的起始點,終點和高度,輸出為大樓輪廓資訊 如下圖 第一行輸出為3 後面有三行輸入表示大樓的資訊 第二行為 1 3 3 第三行為 2 4 4 第三行為 5 6 1 輸出大樓輪廓資訊 第一行 1 2 3 第二行 2 4 4 第三行 5 6 ...

輪廓線動態規劃

這類問題的共同特點是 在乙個比較 窄 的棋盤上進行複雜操作。如果採用傳統方法 以整行整列為狀態 進行動態規劃,將無法進行狀態轉移,因此只能把參差不齊的 輪廓線 作為狀態的一部分。儘管輪廓線的形態複雜,但由於棋盤比較窄,狀態總數仍然可以控制在可以接受的範圍內。直接看例題 1,鋪放骨牌 用1 2骨牌覆蓋...

輪廓線DP 專項

題意 n m n mn m n,m 11 的矩陣,填1 2 1 21 2或2 12 1 2 1方塊,求方案數 解析 以前寫過狀壓的做法,直接一行一行維護,現在寫輪廓線的做法 注意 當前填紅點的意思是,以紅點作為方塊的右下角 因為方塊長度為2,所以對紅點位置有三種操作 向上填 為了使所有方塊填滿,如果...