Минимална почетна енергија потребна за прелазак улице
#працтицеЛинкДив { дисплаи: ноне !импортант; } Дат је низ који садржи позитивне и негативне бројеве. Низ представља контролне тачке од једног до другог краја улице. Позитивне и негативне вредности представљају количину енергије на тој контролној тачки. Позитивни бројеви повећавају енергију, а негативни бројеви смањују. Пронађите минималну почетну енергију потребну за прелазак улице тако да ниво енергије никада не постане 0 или мањи од 0.
Напомена : Вредност минималне потребне почетне енергије биће 1 чак и ако успешно пређемо улицу без губитка енергије на мање од и једнако 0 на било којој контролној тачки. 1 је потребан за почетну контролну тачку.
Примери:
Input : arr[] = {4 -10 4 4 4}
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
Recommended Practice Минимална енергија Покушајте!Приступ грубом силом:
- За сваки могући почетни енергетски ниво (почевши од 1) симулирајте прелазак улице користећи тај енергетски ниво и проверите да ли ниво енергије остаје позитиван у сваком тренутку.
- Вратите минимални почетни ниво енергије који обезбеђује да ниво енергије никада не постане нула или негативан.
Испод је код за горњи приступ:
C++Java#includeusing 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 ; } Python3import 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 akshitaguprzj3C## 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 AGARWALJavaScriptusing 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 )); } } }// 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 ));Излаз :
7
Временска сложеност: О(2^н)
Помоћни простор: О(н)
Узимамо почетну минималну енергију 0 тј. инитМинЕнерги = 0 и енергија на било којој контролној тачки као цуррЕнерги = 0. Сада прођите кроз сваку контролну тачку линеарно и додајте ниво енергије на свакој и-ој контролној тачки, тј. цуррЕнерги = цуррЕнерги + арр[и]. Ако цуррЕнерги постане непозитивна онда нам је потребно најмање 'абс(цуррЕнерги) + 1' додатне почетне енергије да пређемо ову тачку. Стога ажурирамо инитМинЕнерги = (инитМинЕнерги + абс(цуррЕнерги) + 1). Такође ажурирамо цуррЕнерги = 1 пошто сада имамо потребну додатну минималну почетну енергију за следећу тачку.
Испод је имплементација горње идеје.
C++Java// C++ program to find minimum initial energy to // reach end #includeusing 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 ; } Python3// 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.C## 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)JavaScript// 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.PHP< 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 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. ?>
Излаз7Временска сложеност: О(н)
Помоћни простор : О(1)