Appearance
Pick from both sides!
Problem Description
Given an integer array A of size N.
You have to pick exactly B elements from either left or right end of the array A to get the maximum sum.
Find and return this maximum possible sum.
NOTE: Suppose B = 4 and array A contains 10 elements then
- You can pick the first four elements or can pick the last four elements or can pick 1 from the front and 3 from the back etc. you need to return the maximum possible sum of elements you can pick.
Problem Constraints
1 <= N <= 10^5
1 <= B <= N
-10^3 <= A[i] <= 10^3
1 <= N <= 10^5
1 <= B <= N
-10^3 <= A[i] <= 10^3
Input Format
First argument is an integer array A.
Second argument is an integer B.
First argument is an integer array A.
Second argument is an integer B.
Output Format
Return an integer denoting the maximum possible sum of elements you picked.
Return an integer denoting the maximum possible sum of elements you picked.
Example Input
Input 1:
A = [5, -2, 3 , 1, 2]
B = 3
Input 2:
A = [1, 2]
B = 1
Input 1:
A = [5, -2, 3 , 1, 2]
B = 3
Input 2:
A = [1, 2]
B = 1
Example Output
Output 1:
8
Output 2:
2
Output 1:
8
Output 2:
2
Example Explanation
Explanation 1:
Pick element 5 from front and element (1, 2) from back so we get 5 + 1 + 2 = 8
Explanation 2:
Pick element 2 from end as this is the maximum we can get
Explanation 1:
Pick element 5 from front and element (1, 2) from back so we get 5 + 1 + 2 = 8
Explanation 2:
Pick element 2 from end as this is the maximum we can get
Solution
swift
import Foundation
class Solution {
func solve(_ A: inout [Int], _ B: inout Int) -> Int {
let len = A.count
var head = [Int](repeating:0,count:B+1)
var end = [Int](repeating:0,count:B+1)
for i in 1...B{
head[i] = head[i-1] + A[i-1]
end[i] = end[i-1] + A[len-i]
}
var m = Int.min
for i in 0...B {
m = max(m,head[i]+end[B-i])
}
return m
}
}
import Foundation
class Solution {
func solve(_ A: inout [Int], _ B: inout Int) -> Int {
let len = A.count
var head = [Int](repeating:0,count:B+1)
var end = [Int](repeating:0,count:B+1)
for i in 1...B{
head[i] = head[i-1] + A[i-1]
end[i] = end[i-1] + A[len-i]
}
var m = Int.min
for i in 0...B {
m = max(m,head[i]+end[B-i])
}
return m
}
}