本文概述
- 建议:在继续解决方案之前, 请先在"实践"上解决它。
- C / C ++
- Java
- python
- C#
- 的PHP
注意 :即使我们成功过马路而在任何检查点都没有将能量损失到小于等于0, 所需的最小初始能量的值为1。初始检查点需要1。
例子 :
Input : arr[] = {4, -10, 4, 4, 4}Output: 7Suppose initially we have energy = 0, now at 1stcheckpoint, we get 4. At 2nd checkpoint, energy getsreduced 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 becausehaving 7 as initial energy value at 1st checkpointour 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: 1We need at least 1 initial energy to reach firstcheckpointInput : arr[] = {-1, -5, -9}Output: 16
推荐:请在"实践首先, 在继续解决方案之前。我们取初始最小能量0即initMinEnergy = 0, 任何检查点的能量为currEnergy =0。现在线性遍历每个检查点, 并在第i个检查点添加能量级别, 即; currEnergy = currEnergy + arr [i]。如果currEnergy变为非正数, 那么我们至少需要额外的" abs(currEnergy)+1"初始能量才能跨越这一点。因此, 我们更新initMinEnergy =(initMinEnergy + abs(currEnergy)+ 1)。我们还更新了currEnergy = 1, 因为我们现在拥有下一点所需的额外最小初始能量。
以下是上述想法的实现。
C / C ++
// C++ program to find minimum initial energy to
// reach end
#include<
bits/stdc++.h>
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 lineraly
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 endclass 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 lineraly
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.
python
# Python program to find mimimum initial enery to
# reach end# Function to calculate minimum initial enery
# arr[] stroes enery at each checkpoints on street
def minInitialEnergy(arr):
n = len (arr)# initMinEnergy is variable to store minimum initial
# energy required
initMinEnergy = 0 ;
# currEnery is variable to store current value of
# enery 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 lineraly
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
<
?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 lineraly
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(1)
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- Python中的numpy.square()用法详细介绍
- 了解C语言中的volatile限定符第2组(示例)
- 算法设计(从未排序的链表中删除重复项)
- Nodejs使用MongooseJS将MongoDB与Node应用程序连接
- PHP Ds Queue count()函数
- 亚马逊面试体验(针对SDE-1的校园内体验)
- numpy中的随机抽样| random_integers()函数
- Java中的文件权限详细介绍
- JavaScript面试题分析之变量提升和执行上下文