Se le proporciona una lista de N transferencias (numeradas de 0 a N-1) entre dos bancos: el banco A y el banco B. La K-ésima transferencia se describe mediante dos valores: . R[K] (ya sea "A" o "B") que representa al destinatario (el banco al que se envía la transferencia); V[K] que denota el valor enviado a través de la transferencia. . Todas las transferencias se completan en el orden en que aparecen en la lista. Los bancos no quieren endeudarse (es decir, el saldo de su cuenta no puede caer por debajo de 0). ¿Qué saldo mínimo de cuenta inicial en cada banco es necesario para completar las transferencias? Escriba una función: un vector int> solución (cadena &R, vector int> &V); que, dada una cadena R y una matriz de enteros V, ambos de longitud N, devuelve una matriz de dos enteros. Los números enteros deben representar los saldos de cuenta iniciales mínimos para los bancos A y B en el siguiente orden: [banco A, banco B]. La matriz de resultados debe devolverse como un vector de enteros. Ejemplos: Ejemplos: 1. Dado R = "BAABA' y V = [2,4,1,1,2], la función debe devolver [2,4). Los saldos de las cuentas bancarias después de cada transferencia se muestran a continuación tabla: ΤΑΙ Β saldo inicial 2 / 4 transferir 2 de A a B 10 | 6 transferir 4 de B a A | 4 | 2 transferir 1 de B a A | 5 | 1 transferir 1 de A a B | 4 | 2 transferir 2 de B a A 6 10 2. Dado R = "ABAB" y V = [10, 5, 10, 15), la función debe devolver [0, 15) 3. Dado R = "B" y V = [100] , la función debe devolver (100,0).Escriba un algoritmo eficiente para las siguientes suposiciones: la cadena R y el arreglo V son ambos de longitud N; • Ni es un número entero dentro del rango [1..100,000]; • cada elemento del arreglo V es un número entero dentro del rango [1..10,000] • Strina R consta solo de los caracteres "A" y/o "B".
def initial_amount(R, V): min_A, min_B, balance = 0, 0, 0 for receiver, amount in zip(R, V): if receiver == 'A': balance += amount min_B = min(-balance, min_B) else: balance -= amount min_A = min(balance, min_A) return [-min_A, -min_B] initial_amount('BAABA', [2,4,1,1,2]) [2, 4] initial_amount('ABAB', [10,5,10,15]) [0, 15] initial_amount('B', [100]) [100, 0]Solución Javascript
function solution(R, V) { let min_A = 0; let min_B = 0; let balance = 0; let arr = []; let final = []; R = R.split(''); for (var i = 0; i < R.length; i++) { arr.push({ receiver: R[i], amount: V[i], }); } arr.map((k) => { if (k.receiver == 'A') { balance += k.amount; min_B = Math.min(-balance, min_B) } else { balance -= k.amount; min_A = Math.min(balance, min_A) } }); final.push(Math.abs(min_A), Math.abs(min_B)); console.log(final); console.log(min_A, min_B); } solution('B', [100]);solución JavaScript:
function solution(R, V) { let initialBalances = [0, 0]; let minA = 0; let minB = 0; for (let i = 0; i < R.length; i++) { if (R[i] === 'A') { initialBalances[1] -= V[i]; initialBalances[0] += V[i]; minB = Math.min(minB, initialBalances[1]); } else { initialBalances[0] -= V[i]; initialBalances[1] += V[i]; minA = Math.min(minA, initialBalances[0]); } } return [Math.abs(minA), Math.abs(minB)]; }