給你 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 ...