거리를 횡단하는 데 필요한 최소 초기 에너지
#practiceLinkDiv { 표시: 없음 !중요; } 양수와 음수를 포함하는 배열이 제공됩니다. 배열은 거리의 한쪽 끝에서 다른 쪽 끝까지의 검문소를 나타냅니다. 양수 및 음수 값은 해당 체크포인트의 에너지 양을 나타냅니다. 양수는 에너지를 증가시키고 음수는 감소합니다. 에너지 수준이 0 이하가 되지 않도록 길을 건너는 데 필요한 최소 초기 에너지를 구합니다.
메모 : 필요한 최소 초기 에너지 값은 어떤 검문소에서도 0 이하의 에너지를 잃지 않고 성공적으로 길을 건너더라도 1이 됩니다. 초기 체크포인트에는 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부터 시작)에 대해 해당 에너지 수준을 사용하여 도로 횡단을 시뮬레이션하고 에너지 수준이 항상 양수로 유지되는지 확인합니다.
- 에너지 수준이 0이나 음수가 되지 않도록 보장하는 최소 초기 에너지 수준을 반환합니다.
다음은 위의 접근 방식에 대한 코드입니다.
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
시간 복잡도: O(2^n)
보조 공간 : 에)
우리는 초기 최소 에너지를 0으로 취합니다. initMinEnergy = 0이고 모든 체크포인트의 에너지는 currEnergy = 0입니다. 이제 각 체크포인트를 선형으로 순회하고 각 i번째 체크포인트에 에너지 레벨을 추가합니다. currEnergy = currEnergy + arr[i]. currEnergy가 양수가 아닌 경우 이 지점을 통과하려면 최소한 'abs(currEnergy) + 1'의 추가 초기 에너지가 필요합니다. 따라서 initMinEnergy = (initMinEnergy + abs(currEnergy) + 1)을 업데이트합니다. 또한 다음 지점에 필요한 추가 최소 초기 에너지가 있으므로 currEnergy = 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시간복잡도 : O(n)
보조공간 : O(1)