前往
大廳
主題

LeetCode - 1899. Merge Triplets to Form Target Triplet 解題心得

Not In My Back Yard | 2021-09-29 00:00:04 | 巴幣 10 | 人氣 189

題目連結:


題目意譯:
一個三元組(Triplet)為一個有著三個整數之陣列。你被給定一個 2D 整數陣列 triplets,其中 triplets[i] = [ai, bi, ci] 代表著第 i 個三元組。你同時也被給定一整數陣列 target = [x, y, z] 表示著你想要得到的三元組。

為了得到 target ,你可以對 triplets 進行任意次數(有可能零次)的下列操作:
選擇兩索引值(索引值從 0 開始) i 和 j (i ≠ j)並且更新 triplets[j] 為 [max(ai, aj), max(bi, bj), max(ci, cj)]。

例如,如果 triplets[i] = [2, 5, 3] 和 triplets[j] = [1, 7, 5],則 triplets[j] 將會被更新為 [max(2, 1), max(5, 7), max(3, 5)] = [2, 7, 5]。

回傳真(True)如果有可能得到目標三元組 [x, y, z] 作為 triplets 中的一個元素;反之,回傳假(False)。

限制:
1 ≦ triplets.length ≦ 10 ^ 5
triplets[i].length == target.length == 3
1 ≦ ai 、 bi 、 ci 、 x 、 y 、 z ≦ 1000



範例測資:
範例 1:
輸入: triplets = [[2,5,3],[1,8,4],[1,7,5]], target = [2,7,5]
輸出: true
解釋: 執行以下操作:
- 選擇第一個和最後的三元組 [[2,5,3],[1,8,4],[1,7,5]]。更新最後的三元組為 [max(2,1), max(5,7), max(3,5)] = [2,7,5]。 triplets = [[2,5,3],[1,8,4],[2,7,5]]
目標三元組 [2,7,5] 現在為 triplets 的一個元素了。

範例 2:
輸入: triplets = [[1,3,4],[2,5,8]], target = [2,5,8]
輸出: true
解釋: 目標三元組已經是 triplets 的一個元素了。

範例 3:
輸入: triplets = [[2,5,3],[2,3,4],[1,2,5],[5,2,3]], target = [5,5,5]
輸出: true
解釋: 執行以下操作:
- 選擇第一個和第三個三元組 [[2,5,3],[2,3,4],[1,2,5],[5,2,3]]。更新第三個三元組為 [max(2,1), max(5,2), max(3,5)] = [2,5,5]。triplets = [[2,5,3],[2,3,4],[2,5,5],[5,2,3]]。
- 選擇第三個和第四個三元組 [[2,5,3],[2,3,4],[1,2,5],[5,2,3]]。更新第四個三元組為 [max(2,5), max(5,2), max(5,3)] = [5,5,5]。triplets = [[2,5,3],[2,3,4],[2,5,5],[5,5,5]]。
目標三元組 [5,5,5] 現在為 triplets 的一個元素了。

範例 4:
輸入: triplets = [[3,4,5],[4,5,6]], target = [3,2,5]
輸出: false
解釋: 不可能將 [3,2,5] 作為一元素,因為在所有三元組中都不存在 2 。


解題思維:
直接掃過所有三元組 [ai, bi, ci],然後挑出那些滿足 ai ≦ x 、 bi ≦ y 、 ci ≦ z 的三元組。然後根據題目給定的操作「合併」(順序沒差)成一個三元組。如果該三元組等於 target ,那麼就表示我們可以從 triplets 產生出 target,所以回傳真;反之,則代表 triplets 不可能產生出 target ,所以回傳假。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作