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
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
temp.f95:14:8: 14 | do i = 1, m | 1 Error: Symbol āiā at (1) has no IMPLICIT type
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
Result: 1 3 2 4
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.
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.