An array A consisting of N integers is given. It contains daily prices of a stock share for a period of N consecutive days. If a single share was bought on day P and sold on day Q, where 0 ≤ P ≤ Q < N, then the profit of such transaction is equal to A[Q] − A[P], provided that A[Q] ≥ A[P]. Otherwise, the transaction brings loss of A[P] − A[Q].
For example, consider the following array A consisting of six elements such that:
A[0] = 23171 A[1] = 21011 A[2] = 21123 A[3] = 21366 A[4] = 21013 A[5] = 21367If a share was bought on day 0 and sold on day 2, a loss of 2048 would occur because A[2] − A[0] = 21123 − 23171 = −2048. If a share was bought on day 4 and sold on day 5, a profit of 354 would occur because A[5] − A[4] = 21367 − 21013 = 354. Maximum possible profit was 356. It would occur if a share was bought on day 1 and sold on day 5.
Write a function,
function solution(A);
that, given an array A consisting of N integers containing daily prices of a stock share for a period of N consecutive days, returns the maximum possible profit from one transaction during this period. The function should return 0 if it was impossible to gain any profit.
For example, given array A consisting of six elements such that:
A[0] = 23171 A[1] = 21011 A[2] = 21123 A[3] = 21366 A[4] = 21013 A[5] = 21367the function should return 356, as explained above.
Write an efficient algorithm for the following assumptions:
- N is an integer within the range [0..400,000];
- each element of array A is an integer within the range [0..200,000].
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
for (let val of A) {
maxEnd = Math.max(0, maxEnd + val);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
for (let val of A) {
maxEnd = Math.max(0, maxEnd + val);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
for (let val of A) {
maxEnd = Math.max(0, maxEndval);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
for (let val of A) {
maxEnd = Math.max(0, maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
for (let val of A) {
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
for (let val of A) {
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let prevVal = 0;
for (let i = 1; i < A) {
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let prevVal = 0;
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let prevVal = 0;
for (let i = 1; i < A.length; i++) {
prevVal = A[i]-
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = ;
let maxSlice = 0;
let prevVal = 0;
for (let i = 1; i < A.length; i++) {
prevVal = A[i]-
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = A[0];
let maxSlice = 0;
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = A[0];
let maxSlice = 0;
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, val - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
ReferenceError: val is not defined at solution (solution.js:9:30) at solutionWrapper (/tmp/exec.js:402:28) at Promise.resolve.then (/tmp/exec.js:428:24) at <anonymous> at process._tickCallback (internal/process/next_tick.js:188:7) at Function.Module.runMain (module.js:686:11) at startup (bootstrap_node.js:187:16) at bootstrap_node.js:608:3
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = A[0];
let maxSlice = 0;
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = A[0];
let maxSlice = 0;
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = A[0];
let maxSlice = 0;
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = A[0];
let maxSlice = 0;
for (let i = 1; i < A.length; i++) {
if (A[i])
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i])
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i] < curMinVal) {
curMinVal
}
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i] < curMinVal) {
curMinVal = A[i];
} else {
}
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i] < curMinVal) {
curMinVal = A[i];
} else {
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i] < curMinVal) {
curMinVal = A[i];
} else {
let dif
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i] < curMinVal) {
curMinVal = A[i];
} else {
maxEnd = Math.max(0, A[i] - maxEnd);
maxSlice = Math.max(maxSlice, maxEnd);
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
if (A[i] < curMinVal) {
curMinVal = A[i];
} else {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
if (A.length < 2) {
return 0;
}
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[]
[1]
[2, 1]
[1, 2]
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[]
[1]
[2, 1]
[1, 2]
[1, 200000]
function result: 0
function result: 0
function result: 0
function result: 0
function result: 1
function result: 199999
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[]
[1]
[2, 1]
[1, 2]
[0, 200000]
function result: 0
function result: 0
function result: 0
function result: 0
function result: 1
function result: 200000
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[]
[1]
[2, 1]
[1, 2]
[0, 200000]
[1, 10, 5, 9, 0, 12]
function result: 0
function result: 0
function result: 0
function result: 0
function result: 1
function result: 200000
function result: 12
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
[]
[1]
[2, 1]
[1, 2]
[0, 200000]
[1, 10, 5, 9, 0, 12]
function result: 0
function result: 0
function result: 0
function result: 0
function result: 1
function result: 200000
function result: 12
// you can write to stdout for debugging purposes, e.g.
// console.log('this is a debug message');
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
let maxEnd = 0;
let maxSlice = 0;
let curMinVal = A[0]
for (let i = 1; i < A.length; i++) {
maxEnd = Math.max(0, A[i] - curMinVal);
maxSlice = Math.max(maxSlice, maxEnd);
if (A[i] < curMinVal) {
curMinVal = A[i];
}
}
return maxSlice;
}
The solution obtained perfect score.
max profit is after global maximum and before global minimum
large value (99) followed by short V-pattern (values from [1..5]) repeated 100 times