#practiceLinkDiv { mostrar: cap !important; }Donada una matriu que conté nombres positius i negatius. La matriu representa els punts de control d'un extrem a l'altre extrem del carrer. Els valors positius i negatius representen la quantitat d'energia en aquest punt de control. Els nombres positius augmenten l'energia i els negatius disminueixen. Trobeu l'energia inicial mínima necessària per creuar el carrer de manera que el nivell d'energia mai sigui 0 o inferior a 0.
Nota: El valor de l'energia inicial mínima requerida serà 1 encara que creuem el carrer amb èxit sense perdre energia a menys i igual a 0 en qualsevol punt de control. L'1 és necessari per al punt de control inicial.
Exemples:
Input : arr[] = {4 -10 4 4 4}Recommended Practice Energia mínima Prova-ho!
Output: 7
Suppose initially we have energy = 0 now at 1st
checkpoint we get 4. At 2nd checkpoint energy gets
reduced by -10 so we have 4 + (-10) = -6 but at any
checkpoint value of energy can not less than equals
to 0. So initial energy must be at least 7 because
having 7 as initial energy value at 1st checkpoint
our energy will be = 7+4 = 11 and then we can cross
2nd checkpoint successfully. Now after 2nd checkpoint
all checkpoint have positive value so we can cross
street successfully with 7 initial energy.
Input : arr[] = {3 5 2 6 1}
Output: 1
We need at least 1 initial energy to reach first
checkpoint
Input : arr[] = {-1 -5 -9}
Output: 16
Enfocament de força bruta:
- Per a cada nivell d'energia inicial possible (a partir de 1) simuleu l'encreuament del carrer utilitzant aquest nivell d'energia i comproveu si el nivell d'energia continua sent positiu en tot moment.
- Torna el nivell d'energia inicial mínim que garanteix que el nivell d'energia mai esdevingui zero o negatiu.
A continuació es mostra el codi de l'enfocament anterior:
C++
#include using namespace std; // Function to check if energy level never becomes negative or zero bool check(int arr[] int n int initEnergy) { int energy = initEnergy; for (int i = 0; i < n; i++) { energy += arr[i]; if (energy <= 0) { return false; } } return true; } // Function to calculate minimum initial energy // arr[] stores energy at each checkpoints on street int minInitialEnergy(int arr[] int n) { int minEnergy = 1; while (!check(arr n minEnergy)) { minEnergy++; } return minEnergy; } // Driver code int main() { int arr[] = {4 -10 4 4 4}; int n = sizeof(arr)/sizeof(arr[0]); cout << minInitialEnergy(arr n); return 0; }
Java import java.util.*; public class GFG { // Function to check if energy level never becomes // negative or zero static boolean check(int[] arr int n int initEnergy) { int energy = initEnergy; for (int i = 0; i < n; i++) { energy += arr[i]; if (energy <= 0) { return false; } } return true; } // Function to calculate minimum initial energy // arr[] stores energy at each checkpoints on the street static int minInitialEnergy(int[] arr int n) { int minEnergy = 1; while (!check(arr n minEnergy)) { minEnergy++; } return minEnergy; } // Driver code public static void main(String[] args) { int[] arr = { 4 -10 4 4 4 }; int n = arr.length; System.out.println(minInitialEnergy(arr n)); } } // This code is contributed by akshitaguprzj3
Python3 # Function to check if energy level never becomes negative or zero def check(arr n initEnergy): energy = initEnergy for i in range(n): energy += arr[i] if energy <= 0: return False return True # Function to calculate minimum initial energy # arr stores energy at each checkpoints on street def minInitialEnergy(arr n): minEnergy = 1 while not check(arr n minEnergy): minEnergy += 1 return minEnergy # Driver code arr = [4 -10 4 4 4] n = len(arr) print(minInitialEnergy(arr n)) # THIS CODE IS CONTRIBUTED BY CHANDAN AGARWAL
C# using System; namespace EnergyCheck { class GFG { // Function to check if energy level never becomes negative or zero static bool Check(int[] arr int n int initEnergy) { int energy = initEnergy; for (int i = 0; i < n; i++) { energy += arr[i]; if (energy <= 0) { return false; } } return true; } // Function to calculate minimum initial energy // arr[] stores energy at each checkpoints on street static int MinInitialEnergy(int[] arr int n) { int minEnergy = 1; while (!Check(arr n minEnergy)) { minEnergy++; } return minEnergy; } // Driver code static void Main(string[] args) { int[] arr = { 4 -10 4 4 4 }; int n = arr.Length; Console.WriteLine(MinInitialEnergy(arr n)); } } }
JavaScript // Function to check if energy level never becomes negative or zero function check(arr n initEnergy) { let energy = initEnergy; for (let i = 0; i < n; i++) { energy += arr[i]; if (energy <= 0) { return false; } } return true; } // Function to calculate minimum initial energy // arr[] stores energy at each checkpoints on street function minInitialEnergy(arr n) { let minEnergy = 1; while (!check(arr n minEnergy)) { minEnergy++; } return minEnergy; } // Driver code let arr = [4 -10 4 4 4]; let n = arr.length; console.log(minInitialEnergy(arr n));
Sortida:
7
Complexitat temporal: O(2^n)
Espai auxiliar: O(n)
Prenem l'energia mínima inicial 0, és a dir; initMinEnergy = 0 i energia a qualsevol punt de control com a currEnergy = 0. Ara travessa cada punt de control linealment i afegeix el nivell d'energia a cada punt de control i, és a dir; CurrEnergy = CurrEnergy + arr[i]. Si currEnergy esdevé no positiu, necessitem almenys 'abs(currEnergy) + 1' energia inicial addicional per creuar aquest punt. Per tant, actualitzem initMinEnergy = (initMinEnergy + abs(currEnergy) + 1). També actualitzem currEnergy = 1, ja que ara tenim l'energia inicial mínima addicional necessària per al següent punt.
A continuació es mostra la implementació de la idea anterior.
C++// C++ program to find minimum initial energy to // reach end #include using namespace std; // Function to calculate minimum initial energy // arr[] stores energy at each checkpoints on street int minInitialEnergy(int arr[] int n) { // initMinEnergy is variable to store minimum initial // energy required. int initMinEnergy = 0; // currEnergy is variable to store current value of // energy at i'th checkpoint on street int currEnergy = 0; // flag to check if we have successfully crossed the // street without any energy loss <= o at any checkpoint bool flag = 0; // Traverse each check point linearly for (int i=0; i<n; i++) { currEnergy += arr[i]; // If current energy becomes negative or 0 increment // initial minimum energy by the negative value plus 1. // to keep current energy positive (at least 1). Also // update current energy and flag. if (currEnergy <= 0) { initMinEnergy += abs(currEnergy) +1; currEnergy = 1; flag = 1; } } // If energy never became negative or 0 then // return 1. Else return computed initMinEnergy return (flag == 0)? 1 : initMinEnergy; } // Driver Program to test the case int main() { int arr[] = {4 -10 4 4 4}; int n = sizeof(arr)/sizeof(arr[0]); cout << minInitialEnergy(arr n); return 0; }
Java // Java program to find minimum // initial energy to reach end class GFG { // Function to calculate minimum // initial energy arr[] stores energy // at each checkpoints on street static int minInitialEnergy(int arr[] int n) { // initMinEnergy is variable to store // minimum initial energy required. int initMinEnergy = 0; // currEnergy is variable to store // current value of energy at // i'th checkpoint on street int currEnergy = 0; // flag to check if we have successfully // crossed the street without any energy // loss <= o at any checkpoint boolean flag = false; // Traverse each check point linearly for (int i = 0; i < n; i++) { currEnergy += arr[i]; // If current energy becomes negative or 0 // increment initial minimum energy by the negative // value plus 1. to keep current energy // positive (at least 1). Also // update current energy and flag. if (currEnergy <= 0) { initMinEnergy += Math.abs(currEnergy) + 1; currEnergy = 1; flag = true; } } // If energy never became negative or 0 then // return 1. Else return computed initMinEnergy return (flag == false) ? 1 : initMinEnergy; } // Driver code public static void main(String[] args) { int arr[] = {4 -10 4 4 4}; int n = arr.length; System.out.print(minInitialEnergy(arr n)); } } // This code is contributed by Anant Agarwal.
Python3 # Python program to find minimum initial energy to # reach end # Function to calculate minimum initial energy # arr[] stores energy at each checkpoints on street def minInitialEnergy(arr): n = len(arr) # initMinEnergy is variable to store minimum initial # energy required initMinEnergy = 0; # currEnergy is variable to store current value of # energy at i'th checkpoint on street currEnergy = 0 # flag to check if we have successfully crossed the # street without any energy loss <= 0 at any checkpoint flag = 0 # Traverse each check point linearly for i in range(n): currEnergy += arr[i] # If current energy becomes negative or 0 increment # initial minimum energy by the negative value plus 1. # to keep current energy positive (at least 1). Also # update current energy and flag. if currEnergy <= 0 : initMinEnergy += (abs(currEnergy) +1) currEnergy = 1 flag = 1 # If energy never became negative or 0 then # return 1. Else return computed initMinEnergy return 1 if flag == 0 else initMinEnergy # Driver program to test above function arr = [4 -10 4 4 4] print (minInitialEnergy(arr)) # This code is contributed by Nikhil Kumar Singh(nickzuck_007)
C# // C# program to find minimum // C# program to find minimum // initial energy to reach end using System; class GFG { // Function to calculate minimum // initial energy arr[] stores energy // at each checkpoints on street static int minInitialEnergy(int []arr int n) { // initMinEnergy is variable to store // minimum initial energy required. int initMinEnergy = 0; // currEnergy is variable to store // current value of energy at // i'th checkpoint on street int currEnergy = 0; // flag to check if we have successfully // crossed the street without any energy // loss <= o at any checkpoint bool flag = false; // Traverse each check point linearly for (int i = 0; i < n; i++) { currEnergy += arr[i]; // If current energy becomes negative or 0 // negativeincrement initial minimum energy // by the value plus 1. to keep current // energy positive (at least 1). Also // update current energy and flag. if (currEnergy <= 0) { initMinEnergy += Math.Abs(currEnergy) + 1; currEnergy = 1; flag = true; } } // If energy never became negative // or 0 then return 1. Else return // computed initMinEnergy return (flag == false) ? 1 : initMinEnergy; } // Driver code public static void Main() { int []arr = {4 -10 4 4 4}; int n = arr.Length; Console.Write(minInitialEnergy(arr n)); } } // This code is contributed by Nitin Mittal.
JavaScript <script> // Javascript program to find minimum // initial energy to reach end // Function to calculate minimum // initial energy arr[] stores // energy at each checkpoints on street function minInitialEnergy(arr n) { // initMinEnergy is variable // to store minimum initial // energy required. let initMinEnergy = 0; // currEnergy is variable to // store current value of energy // at i'th checkpoint on street let currEnergy = 0; // flag to check if we have // successfully crossed the // street without any energy // loss <= o at any checkpoint let flag = 0; // Traverse each check // point linearly for (let i = 0; i < n; i++) { currEnergy += arr[i]; // If current energy becomes // negative or 0 increment // initial minimum energy by // the negative value plus 1. // to keep current energy // positive (at least 1). Also // update current energy and flag. if (currEnergy <= 0) { initMinEnergy += Math.abs(currEnergy) + 1; currEnergy = 1; flag = 1; } } // If energy never became // negative or 0 then // return 1. Else return // computed initMinEnergy return (flag == 0) ? 1 : initMinEnergy; } // Driver Code let arr = new Array(4 -10 4 4 4); let n = arr.length; document.write(minInitialEnergy(arr n)); // This code is contributed // by Saurabh Jaiswal </script>
PHP // PHP program to find minimum // initial energy to reach end // Function to calculate minimum // initial energy arr[] stores // energy at each checkpoints on street function minInitialEnergy($arr $n) { // initMinEnergy is variable // to store minimum initial // energy required. $initMinEnergy = 0; // currEnergy is variable to // store current value of energy // at i'th checkpoint on street $currEnergy = 0; // flag to check if we have // successfully crossed the // street without any energy // loss <= o at any checkpoint $flag = 0; // Traverse each check // point linearly for ($i = 0; $i < $n; $i++) { $currEnergy += $arr[$i]; // If current energy becomes // negative or 0 increment // initial minimum energy by // the negative value plus 1. // to keep current energy // positive (at least 1). Also // update current energy and flag. if ($currEnergy <= 0) { $initMinEnergy += abs($currEnergy) + 1; $currEnergy = 1; $flag = 1; } } // If energy never became // negative or 0 then // return 1. Else return // computed initMinEnergy return ($flag == 0) ? 1 : $initMinEnergy; } // Driver Code $arr = array(4 -10 4 4 4); $n = sizeof($arr); echo minInitialEnergy($arr $n); // This code is contributed // by nitin mittal. ?> Sortida
7
Complexitat temporal: O(n)
Espai auxiliar: O(1)