🧊陣列應用: 轉成2D陣列 Convert 1D Array Into 2D Array_Leetcode 2022

更新於 發佈於 閱讀時間約 1 分鐘

題目敘述 Convert 1D Array Into 2D Array


給定一個一維輸入陣列,請轉換成高度為m*寬度為n的二維陣列,
以二維陣列的形式輸出。

如果無法轉換,請輸出空陣列。


示意圖

raw-image



測試範例

Example 1:

Input: original = [1,2,3,4], m = 2, n = 2
Output: [[1,2],[3,4]]
Explanation: The constructed 2D array should contain 2 rows and 2 columns.
The first group of n=2 elements in original, [1,2], becomes the first row in the constructed 2D array.
The second group of n=2 elements in original, [3,4], becomes the second row in the constructed 2D array.

Example 2:

Input: original = [1,2,3], m = 1, n = 3
Output: [[1,2,3]]
Explanation: The constructed 2D array should contain 1 row and 3 columns.
Put all three elements in original into the first row of the constructed 2D array.

Example 3:

Input: original = [1,2], m = 1, n = 1
Output: []
Explanation: There are 2 elements in original.
It is impossible to fit 2 elements in a 1x1 2D array, so return an empty 2D array.

約束條件

Constraints:

  • 1 <= original.length <= 5 * 10^4

輸入陣列的高度介於1~五萬之間。

  • 1 <= original[i] <= 105

輸入陣列的寬度介於1~五萬之間。

  • 1 <= m, n <= 4 * 10^4

二維陣列的高和寬都介於1~四萬之間。


演算法 List comprehension


根據指定的高度和寬度,計算是否可以相容轉換?

如果不行,直接輸出空陣列[]。

        # total element count of input array
element_count = len(original)

if element_count != m * n:

# Reject if element count mismatch with new 2D array
return []


如果可以,根據列表推導式直接轉換成對應的二維陣列即可。


程式碼 List comprehension

class Solution:
def construct2DArray(self, original: List[int], m: int, n: int) -> List[List[int]]:

# total element count of input array
element_count = len(original)

if element_count != m * n:

# Reject if element count mismatch with new 2D array
return []

# reshape to specified 2D array by list comprehension
return [ original[y*n:y*n+n] for y in range(m)]

複雜度分析

時間複雜度: O(m*n)

每個陣列元素搬移一次,總共m*n個元素。

空間複雜度: O(m*n)

每個陣列元素需要一個新的空間,總共m*n個元素。


Reference

[1] Convert 1D Array Into 2D Array - LeetCode

[2] List comprehension 列表推導式

留言
avatar-img
留言分享你的想法!
列陣!
小松鼠-avatar-img
發文者
2024/09/01
林燃(創作小說家) 太帥了吧,姊姊直接寫到小說裡當主角!內舉不避親。
avatar-img
小松鼠的演算法樂園
95會員
427內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/06
題目敘述 Rank Transform of an Array 給定一個陣列arr,請根據數字的大小給予序號,序號值介於1~len( set(arr) )之間。 最大的數字給予最大的序號。 次大的數字給予次大的序號。 ...依此類推 最小的數字給予最小的序號1。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/10/01
題目敘述 Check If Array Pairs Are Divisible by k 給定一個長度為偶數的整數陣列arr,和一個整數k 。 我們想把陣列元素兩兩一組組成pair,使得每個pair的總和可以被k整除。 如果做得到,返回True。 如果不行,返回False。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
2024/09/29
My Calendar II 給定一個行事曆的class定義和行程安排的介面。 請完成下列function 1.建構子MyCalendarTwo() 2.boolean book(int start, int end) 在行事曆加入一項新行程,起始時間為start, 結束時間為end。
Thumbnail
看更多
你可能也想看
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
「欸!這是在哪裡買的?求連結 🥺」 誰叫你太有品味,一發就讓大家跟著剁手手? 讓你回購再回購的生活好物,是時候該介紹出場了吧! 「開箱你的美好生活」現正召喚各路好物的開箱使者 🤩
Thumbnail
題目敘述: 給定一個二維陣列的高與寬,並且給定起點位置座標。 請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。 以陣列的形式返回答案。
Thumbnail
題目敘述: 給定一個二維陣列的高與寬,並且給定起點位置座標。 請從起點位置開始順時針拜訪陣列元素,並且把沿路走過的座標記錄下來。 以陣列的形式返回答案。
Thumbnail
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
Thumbnail
題目敘述 Intersection of Two Arrays II 給定兩個輸入陣列,請找出兩個陣列交集的元素,並且依照出現次數輸出。 測試範例 Example 1: Input: nums1 = [1,2,2,1], nums2 = [2,2] Output: [2,2] 交集元素
Thumbnail
題目會給我們一個pair陣列,裡面都是原本陣列相鄰元素形成的pair,順序已經被打散。 要求我們從pair陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
Thumbnail
題目會給我們一個pair陣列,裡面都是原本陣列相鄰元素形成的pair,順序已經被打散。 要求我們從pair陣列重建出原本的陣列。 答案可能有不只一組,任選一組回傳即可。
Thumbnail
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
Thumbnail
題目會給定我們一個陣列和參數k,要求我們將陣列右旋k次,然後輸出內容。 例如[1,2,3,4,5] 右旋 2次,輸出就是[4,5,1,2,3]
Thumbnail
題目會給一個輸入陣列,要求我們判斷所有的數字是否構成一組單調數列。 也就是全部的數字構成一條單調遞增數列(逐漸變大), 或者一條單調遞減數列(逐漸變小)?
Thumbnail
題目會給一個輸入陣列,要求我們判斷所有的數字是否構成一組單調數列。 也就是全部的數字構成一條單調遞增數列(逐漸變大), 或者一條單調遞減數列(逐漸變小)?
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News