最大高度 leetcode1691 go

2021-10-14 18:10:58 字數 1485 閱讀 4649

給你 n 個長方體 cuboids ,

其中第 i 個長方體的長寬高表示為 cuboids[i] = [widthi, lengthi, heighti](下標從 0 開始)。

請你從 cuboids 選出乙個 子集 ,並將它們堆疊起來。

如果 widthi <= widthj 且 lengthi <= lengthj 且 heighti <= heightj ,

你就可以將長方體 i 堆疊在長方體 j 上。你可以通過旋轉把長方體的長寬高重新排列,以將它放在另乙個長方體上。

返回 堆疊長方體 cuboids 可以得到的 最大高度 。

示例 1:輸入:cuboids = [[50,45,20],[95,37,53],[45,23,12]] 輸出:190

解釋:第 1 個長方體放在底部,53x37 的一面朝下,高度為 95 。

第 0 個長方體放在中間,45x20 的一面朝下,高度為 50 。

第 2 個長方體放在上面,23x12 的一面朝下,高度為 45 。

總高度是 95 + 50 + 45 = 190 。

示例 2:輸入:cuboids = [[38,25,45],[76,35,3]] 輸出:76

解釋:無法將任何長方體放在另乙個上面。

選擇第 1 個長方體然後旋轉它,使 35x3 的一面朝下,其高度為 76 。

示例 3:輸入:cuboids = [[7,11,17],[7,17,11],[11,7,17],[11,17,7],[17,7,11],[17,11,7]]

輸出:102

解釋:重新排列長方體後,可以看到所有長方體的尺寸都相同。

你可以把 11x7 的一面朝下,這樣它們的高度就是 17 。

堆疊長方體的最大高度為 6 * 17 = 102 。

1 <= n <= 100

1 <= widthi, lengthi, heighti <= 100

1、排序+動態規劃;時間複雜度o(n^2),空間複雜度o(n)

func maxheight(cuboids int) int sort.slice(cuboids, func(i, j int) bool return cuboids[i][1] < cuboids[j][1]}return cuboids[i][0] < cuboids[j][0]})n := len(cuboids)dp := make(int, n)for i := 0; i < n; i++ res := dp[0]for i := 1; i < n; i++ }res = max(res, dp[i])}return res}func max(a, b int) int return b}
hard題目,需要先排序,然後轉換位3維最長子序列問題,題目思路是動態規劃,參考

leetcode 300.最長上公升子串行

leetcode 354.俄羅斯套娃信封問題

LeetCode 169 多數元素

給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 思路一 既然是多數且超過n 2,那麼排序之後,這些數中間...

LeetCode 169 多數元素

題目描述 給定乙個大小為 n 的陣列,找到其中的多數元素。多數元素是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在多數元素。法 1 直接遍歷 時間複雜度 o n 2 空間複雜度 o 1 public intmajorityelement1 int nums if...

leetcode169 多數元素

用乙個變數和計數器輔助,變數存放當前元素的值a,計數器統計當前元素出現次數n 如果遇到的元素和a不一樣,則n減一,如果n為零,則把a替換成遇到的元素,b設為1 最後的a即為要求的多數元素 class solution count candidate num 1 1 return candidate ...