Convert 1D Array Into 2D Array

šŸ  ā¬…ļø āž”ļø

You are given a 0-indexed 1-dimensional (1D) integer array original, and two integers, m and n. You are tasked with creating a 2-dimensional (2D) array with m rows and n columns using all the elements from original.

The elements from indices 0 to n - 1 (inclusive) of original should form the first row of the constructed 2D array, the elements from indices n to 2 * n - 1 (inclusive) should form the second row of the constructed 2D array, and so on.

Return an m x n 2D array constructed according to the above procedure, or an empty 2D array if it is impossible.

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 * 104
  • 1 <= original[i] <= 105
  • 1 <= m, n <= 4 * 104

Note: This problem is from LeetCode.
āŒ Compiled
āŒ Executed
āŒ Correct
program main
    implicit none

    integer, parameter :: m = 2, n = 2
    integer, dimension(4) :: original = [1, 2, 3, 4]
    integer, allocatable, dimension(:, :) :: result

    allocate(result(m, n))

    result = construct_array(original, m, n)

    write(*, '(A)') 'Result:'
    write(*, '(A)') '[' // repeat('[', m) // ']'
    do i = 1, m
        write(*, '(A)') '[' // repeat(' ', n) // ']'
    end do
    write(*, '(A)') '[' // repeat(']', m) // ']'

contains

    function construct_array(original, m, n) result(result)
        implicit none
        integer, dimension(:), intent(in) :: original
        integer, value :: m, n
        integer, allocatable, dimension(:, :) :: result
        integer :: i, j

        allocate(result(m, n))

        do i = 1, m
            do j = 1, n
                if (j > size(original)) then
                    result(i, j) = 0
                else
                    result(i, j) = original(j)
                end if
            end do
        end do
    end function construct_array
end program main
āœ… Compiled
āœ… Executed
āŒ Correct
module solve_the_problem
    implicit none
    contains
    function solve(original, m, n) result(result)
        integer, intent(in) :: original(:), m, n
        integer, allocatable :: result(:, :)
        integer :: i, j, k

        ! Check if it is possible to construct the 2D array
        if (size(original) < m * n) then
            allocate(result(0, 0))
            return
        end if

        ! Construct the 2D array
        allocate(result(m, n))
        k = 1
        do i = 1, m
            do j = 1, n
                result(i, j) = original(k)
                k = k + 1
            end do
        end do
    end function solve
end module

program test
    use solve_the_problem
    implicit none
    integer, parameter :: m = 2, n = 2
    integer, parameter :: original(4) = [1, 2, 3, 4]
    integer, allocatable :: result(:, :)

    result = solve(original, m, n)

    write (*, *) "Result:"
    write (*, "(4(i0, 1x))") result
end program
šŸŒ Data from online sources
def max_alternating_sum(nums):
    even_sum = odd_sum = 0
    for num in nums:
        even_sum, odd_sum = max(even_sum + num, odd_sum), even_sum - num
    return even_sum

The algorithm loops through each element of the input array nums. For each number: 1. Calculate the new possible even index sum by adding the current number to the previous even sum. 2. Compare it with the previous odd index sum and take the maximum of the two; 3. Update the odd index sum by subtracting the current number from the updated even sum.

The algorithm maintains the maximum alternating sum in both even and odd indices during the loop. After iterating through all the numbers, the final result (maximum alternating sum) will be stored in the even sum variable. This approach has a time complexity of O(n) where n is the number of elements in the input array.

šŸŒ Data from online sources
long long maxAlternatingSum(vector<int>& nums) {
    long long evenSum = 0, oddSum = 0;
    for (int num : nums) {
        evenSum = max(evenSum + num, oddSum);
        oddSum = evenSum - num;
    }
    return evenSum;
}

The algorithm loops through each element of the input array nums. For each number: 1. Calculate the new possible even index sum by adding the current number to the previous even sum. 2. Compare it with the previous odd index sum and take the maximum of the two; 3. Update the odd index sum by subtracting the current number from the updated even sum.

The algorithm maintains the maximum alternating sum in both even and odd indices during the loop. After iterating through all the numbers, the final result (maximum alternating sum) will be stored in the even sum variable. This approach has a time complexity of O(n) where n is the number of elements in the input array.