本文概述
- C++
- C
- Java
- Python3
- C#
- PHP
- C++
- C
- Java
- Python3
- C#
- PHP
- C++
- Java
- Python3
- C#
- PHP
- C++
- C
- Java
- Python3
- C#
- PHP
- C++
- Java
- Python3
- C#
- PHP
例子 :
Input : arr = {2, 3, 10, 6, 4, 8, 1}
Output : 8
Explanation : The maximum difference is between 10 and 2.Input : arr = {7, 9, 5, 6, 3, 2}
Output : 2
Explanation : The maximum difference is between 9 and 7.
方法1(简单)
使用两个循环。在外循环中, 拾取元素一个接一个, 在内循环中, 计算拾取的元素与数组中每个其他元素的差, 并将该差与迄今为止计算出的最大差进行比较。下面是上述方法的实现:
C++
// C++ program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
#include <
bits/stdc++.h>
using namespace std;
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
int maxDiff( int arr[], int arr_size)
{
int max_diff = arr[1] - arr[0];
for ( int i = 0;
i <
arr_size;
i++)
{
for ( int j = i+1;
j <
arr_size;
j++)
{
if (arr[j] - arr[i] >
max_diff)
max_diff = arr[j] - arr[i];
}
}
return max_diff;
} /* Driver program to test above function */
int main()
{
int arr[] = {1, 2, 90, 10, 110};
int n = sizeof (arr) / sizeof (arr[0]);
// Function calling
cout <
<
"Maximum difference is " <
<
maxDiff(arr, n);
return 0;
}
C
#include<
stdio.h>
/* The function assumes that there are at least two
elements in array.
The function returns a negative value if the array is
sorted in decreasing order.
Returns 0 if elements are equal */
int maxDiff( int arr[], int arr_size)
{
int max_diff = arr[1] - arr[0];
int i, j;
for (i = 0;
i <
arr_size;
i++)
{
for (j = i+1;
j <
arr_size;
j++)
{
if (arr[j] - arr[i] >
max_diff)
max_diff = arr[j] - arr[i];
}
}
return max_diff;
}/* Driver program to test above function */
int main()
{
int arr[] = {1, 2, 90, 10, 110};
printf ( "Maximum difference is %d" , maxDiff(arr, 5));
getchar ();
return 0;
}
Java
// Java program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
class MaximumDiffrence
{
/* The function assumes that there are at least two
elements in array.
The function returns a negative value if the array is
sorted in decreasing order.
Returns 0 if elements are equal */
int maxDiff( int arr[], int arr_size)
{
int max_diff = arr[ 1 ] - arr[ 0 ];
int i, j;
for (i = 0 ;
i <
arr_size;
i++)
{
for (j = i + 1 ;
j <
arr_size;
j++)
{
if (arr[j] - arr[i] >
max_diff)
max_diff = arr[j] - arr[i];
}
}
return max_diff;
}/* Driver program to test above functions */
public static void main(String[] args)
{
MaximumDiffrence maxdif = new MaximumDiffrence();
int arr[] = { 1 , 2 , 90 , 10 , 110 };
System.out.println( "Maximum differnce is " +
maxdif.maxDiff(arr, 5 ));
}
}// This code has been contributed by Mayank Jaiswal
Python3
# Python 3 code to find Maximum difference
# between two elements such that larger
# element appears after the smaller number# The function assumes that there are at
# least two elements in array. The function
# returns a negative value if the array is
# sorted in decreasing order. Returns 0
# if elements are equal
def maxDiff(arr, arr_size):
max_diff = arr[ 1 ] - arr[ 0 ]for i in range ( 0 , arr_size ):
for j in range ( i + 1 , arr_size ):
if (arr[j] - arr[i] >
max_diff):
max_diff = arr[j] - arr[i]return max_diff# Driver program to test above function
arr = [ 1 , 2 , 90 , 10 , 110 ]
size = len (arr)
print ( "Maximum difference is" , maxDiff(arr, size))# This code is contributed by Swetank Modi
C#
// C# code to find Maximum difference
using System;
class GFG {// The function assumes that there
// are at least two elements in array.
// The function returns a negative
// value if the array is sorted in
// decreasing order. Returns 0 if
// elements are equal
static int maxDiff( int [] arr, int arr_size)
{
int max_diff = arr[1] - arr[0];
int i, j;
for (i = 0;
i <
arr_size;
i++) {
for (j = i + 1;
j <
arr_size;
j++) {
if (arr[j] - arr[i] >
max_diff)
max_diff = arr[j] - arr[i];
}
}
return max_diff;
}// Driver code
public static void Main()
{int [] arr = { 1, 2, 90, 10, 110 };
Console.Write( "Maximum differnce is " +
maxDiff(arr, 5));
}
}// This code is contributed by Sam007
PHP
<
?php
// PHP program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
function maxDiff( $arr , $arr_size )
{
$max_diff = $arr [1] - $arr [0];
for ( $i = 0;
$i <
$arr_size ;
$i ++)
{
for ( $j = $i +1;
$j <
$arr_size ;
$j ++)
{
if ( $arr [ $j ] - $arr [ $i ] >
$max_diff )
$max_diff = $arr [ $j ] - $arr [ $i ];
}
}
return $max_diff ;
} // Driver Code
$arr = array (1, 2, 90, 10, 110);
$n = sizeof( $arr );
// Function calling
echo "Maximum difference is " .
maxDiff( $arr , $n );
// This code is contributed
// by Akanksha Rai(Abby_akku)
输出:
Maximum difference is 109
时间复杂度:
O(n ^ 2)
辅助空间:
O(1)
方法2(棘手而又高效)
在这种方法中, 我们不采用选取的元素与其他元素的差异, 而是采用迄今为止找到的最小元素的差异。因此, 我们需要跟踪两件事:
1)到目前为止发现的最大差异(max_diff)。
2)到目前为止访问的最小人数(min_element)。
C++
// C++ program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
#include <
bits/stdc++.h>
using namespace std;
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
int maxDiff( int arr[], int arr_size)
{
// Maximum difference found so far
int max_diff = arr[1] - arr[0];
// Minimum number visited so far
int min_element = arr[0];
for ( int i = 1;
i <
arr_size;
i++)
{
if (arr[i] - min_element >
max_diff)
max_diff = arr[i] - min_element;
if (arr[i] <
min_element)
min_element = arr[i];
}return max_diff;
} /* Driver program to test above function */
int main()
{
int arr[] = {1, 2, 90, 10, 110};
int n = sizeof (arr) / sizeof (arr[0]);
// Function calling
cout <
<
"Maximum difference is " <
<
maxDiff(arr, n);
return 0;
}
C
#include<
stdio.h>
/* The function assumes that there are at least two
elements in array.
The function returns a negative value if the array is
sorted in decreasing order.
Returns 0 if elements are equal */
int maxDiff( int arr[], int arr_size)
{
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int i;
for (i = 1;
i <
arr_size;
i++)
{
if (arr[i] - min_element >
max_diff)
max_diff = arr[i] - min_element;
if (arr[i] <
min_element)
min_element = arr[i];
}
return max_diff;
} /* Driver program to test above function */
int main()
{
int arr[] = {1, 2, 6, 80, 100};
int size = sizeof (arr)/ sizeof (arr[0]);
printf ( "Maximum difference is %d" , maxDiff(arr, size));
getchar ();
return 0;
}
Java
// Java program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
class MaximumDiffrence
{
/* The function assumes that there are at least two
elements in array.
The function returns a negative value if the array is
sorted in decreasing order.
Returns 0 if elements are equal*/
int maxDiff( int arr[], int arr_size)
{
int max_diff = arr[ 1 ] - arr[ 0 ];
int min_element = arr[ 0 ];
int i;
for (i = 1 ;
i <
arr_size;
i++)
{
if (arr[i] - min_element >
max_diff)
max_diff = arr[i] - min_element;
if (arr[i] <
min_element)
min_element = arr[i];
}
return max_diff;
}/* Driver program to test above functions */
public static void main(String[] args)
{
MaximumDiffrence maxdif = new MaximumDiffrence();
int arr[] = { 1 , 2 , 90 , 10 , 110 };
int size = arr.length;
System.out.println( "MaximumDifference is " +
maxdif.maxDiff(arr, size));
}
}// This code has been contributed by Mayank Jaiswal
Python3
# Python 3 code to find Maximum difference
# between two elements such that larger
# element appears after the smaller number# The function assumes that there are
# at least two elements in array.
# The function returns a negative
# value if the array is sorted in
# decreasing order. Returns 0 if
# elements are equal
def maxDiff(arr, arr_size):
max_diff = arr[ 1 ] - arr[ 0 ]
min_element = arr[ 0 ]for i in range ( 1 , arr_size ):
if (arr[i] - min_element >
max_diff):
max_diff = arr[i] - min_elementif (arr[i] <
min_element):
min_element = arr[i]
return max_diff# Driver program to test above function
arr = [ 1 , 2 , 6 , 80 , 100 ]
size = len (arr)
print ( "Maximum difference is" , maxDiff(arr, size))# This code is contributed by Swetank Modi
C#
// C# code to find Maximum difference
using System;
class GFG {// The function assumes that there
// are at least two elements in array.
// The function returns a negative
// value if the array is sorted in
// decreasing order.Returns 0 if
// elements are equal
static int maxDiff( int [] arr, int arr_size)
{
int max_diff = arr[1] - arr[0];
int min_element = arr[0];
int i;
for (i = 1;
i <
arr_size;
i++) {
if (arr[i] - min_element >
max_diff)
max_diff = arr[i] - min_element;
if (arr[i] <
min_element)
min_element = arr[i];
}
return max_diff;
}// Driver code
public static void Main()
{
int [] arr = { 1, 2, 90, 10, 110 };
int size = arr.Length;
Console.Write( "MaximumDifference is " +
maxDiff(arr, size));
}
}// This code is contributed by Sam007
PHP
<
?php
// PHP program to find Maximum
// difference between two elements
// such that larger element appears
// after the smaller number// The function assumes that there
// are at least two elements in array.
// The function returns a negative
// value if the array is sorted in
// decreasing order and returns 0
// if elements are equal
function maxDiff( $arr , $arr_size )
{
// Maximum difference found so far
$max_diff = $arr [1] - $arr [0];
// Minimum number visited so far
$min_element = $arr [0];
for ( $i = 1;
$i <
$arr_size ;
$i ++)
{
if ( $arr [ $i ] - $min_element >
$max_diff )
$max_diff = $arr [ $i ] - $min_element ;
if ( $arr [ $i ] <
$min_element )
$min_element = $arr [ $i ];
}return $max_diff ;
}// Driver Code
$arr = array (1, 2, 90, 10, 110);
$n = count ( $arr );
// Function calling
echo "Maximum difference is " .
maxDiff( $arr , $n );
// This code is contributed by Sam007
?>
输出如下:
Maximum difference is 109
时间复杂度:O(n)
辅助空间:O(1)
像min元素一样, 我们也可以从右侧跟踪max元素。
感谢Katamaran建议这种方法。
下面是实现:
C++
// C++ program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
#include <
bits/stdc++.h>
using namespace std;
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
int maxDiff( int arr[], int n)
{
// Initialize Result
int maxDiff = -1;
// Initialize max element from right side
int maxRight = arr[n-1];
for ( int i = n-2;
i >
= 0;
i--)
{
if (arr[i] >
maxRight)
maxRight = arr[i];
else
{
int diff = maxRight - arr[i];
if (diff >
maxDiff)
{
maxDiff = diff;
}
}
}
return maxDiff;
}/* Driver program to test above function */
int main()
{
int arr[] = {1, 2, 90, 10, 110};
int n = sizeof (arr) / sizeof (arr[0]);
// Function calling
cout <
<
"Maximum difference is " <
<
maxDiff(arr, n);
return 0;
}
Java
// Javaprogram to find Maximum difference
// between two elements such that larger
// element appears after the smaller numberimport java.io.*;
class GFG {
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
static int maxDiff( int arr[], int n)
{
// Initialize Result
int maxDiff = - 1 ;
// Initialize max element from right side
int maxRight = arr[n- 1 ];
for ( int i = n- 2 ;
i >
= 0 ;
i--)
{
if (arr[i] >
maxRight)
maxRight = arr[i];
else
{
int diff = maxRight - arr[i];
if (diff >
maxDiff)
{
maxDiff = diff;
}
}
}
return maxDiff;
}/* Driver program to test above function */
public static void main (String[] args) {
int arr[] = { 1 , 2 , 90 , 10 , 110 };
int n = arr.length;
// Function calling
System.out.println ( "Maximum difference is " + maxDiff(arr, n));
}
//This code is contributed by Tushil..
}
Python3
# Python3 program to find Maximum difference
# between two elements such that larger
# element appears after the smaller number# The function assumes that there are
# at least two elements in array. The
# function returns a negative value if the
# array is sorted in decreasing order and
# returns 0 if elements are equal
def maxDiff(arr, n):# Initialize Result
maxDiff = - 1# Initialize max element from
# right side
maxRight = arr[n - 1 ] for i in range (n - 2 , - 1 , - 1 ):
if (arr[i] >
maxRight):
maxRight = arr[i]
else :
diff = maxRight - arr[i]
if (diff >
maxDiff):
maxDiff = diff
return maxDiff# Driver Code
if __name__ = = '__main__' :
arr = [ 1 , 2 , 90 , 10 , 110 ]
n = len (arr)# Function calling
print ( "Maximum difference is" , maxDiff(arr, n))# This code is contributed by 29AjayKumar
C#
// C# program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
using System;
class GFG
{
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
static int maxDiff( int [] arr, int n)
{
// Initialize Result
int maxDiff = -1;
// Initialize max element from right side
int maxRight = arr[n-1];
for ( int i = n-2;
i >
= 0;
i--)
{
if (arr[i] >
maxRight)
maxRight = arr[i];
else
{
int diff = maxRight - arr[i];
if (diff >
maxDiff)
{
maxDiff = diff;
}
}
}
return maxDiff;
}// Driver Code
public static void Main ()
{
int [] arr = {1, 2, 90, 10, 110};
int n = arr.Length;
// Function calling
Console.WriteLine( "Maximum difference is " +
maxDiff(arr, n));
}
}// This code is contributed
// by Akanksha Rai
PHP
<
?php
// PHP program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number /* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
function maxDiff( $arr , $n )
{
// Initialize Result
$maxDiff = -1;
// Initialize max element from
// right side
$maxRight = $arr [ $n - 1];
for ( $i = $n - 2;
$i >
= 0;
$i --)
{
if ( $arr [ $i ] >
$maxRight )
$maxRight = $arr [ $i ];
else
{
$diff = $maxRight - $arr [ $i ];
if ( $diff >
$maxDiff )
{
$maxDiff = $diff ;
}
}
}
return $maxDiff ;
} // Driver Code
$arr = array (1, 2, 90, 10, 110);
$n = sizeof( $arr );
// Function calling
echo "Maximum difference is " , maxDiff( $arr , $n );
// This code is contributed by ajit
?>
输出如下:
Maximum difference is 109
方法3(另一个棘手的解决方案)
首先找到数组的相邻元素之间的差异, 并将所有差异存储在大小为n-1的辅助数组diff []中。现在, 这个问题变成寻找该差值数组的最大和子数组。
感谢Shubham Mittal提出此解决方案。
下面是实现:
C++
// C++ program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
#include <
bits/stdc++.h>
using namespace std;
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
int maxDiff( int arr[], int n)
{
// Create a diff array of size n-1.
// The array will hold the difference
// of adjacent elements
int diff[n-1];
for ( int i=0;
i <
n-1;
i++)
diff[i] = arr[i+1] - arr[i];
// Now find the maximum sum
// subarray in diff array
int max_diff = diff[0];
for ( int i=1;
i<
n-1;
i++)
{
if (diff[i-1] >
0)
diff[i] += diff[i-1];
if (max_diff <
diff[i])
max_diff = diff[i];
}
return max_diff;
}/* Driver program to test above function */
int main()
{
int arr[] = {80, 2, 6, 3, 100};
int n = sizeof (arr) / sizeof (arr[0]);
// Function calling
cout <
<
"Maximum difference is " <
<
maxDiff(arr, n);
return 0;
}
C
#include<
stdio.h>
int maxDiff( int arr[], int n)
{
// Create a diff array of size n-1. The array will hold
//the difference of adjacent elements
int diff[n-1];
for ( int i=0;
i <
n-1;
i++)
diff[i] = arr[i+1] - arr[i];
// Now find the maximum sum subarray in diff array
int max_diff = diff[0];
for ( int i=1;
i<
n-1;
i++)
{
if (diff[i-1] >
0)
diff[i] += diff[i-1];
if (max_diff <
diff[i])
max_diff = diff[i];
}
return max_diff;
}/* Driver program to test above function */
int main()
{
int arr[] = {80, 2, 6, 3, 100};
int size = sizeof (arr)/ sizeof (arr[0]);
printf ( "Maximum difference is %d" , maxDiff(arr, size));
return 0;
}
Java
// Java program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
class MaximumDiffrence
{
int maxDiff( int arr[], int n)
{
// Create a diff array of size n-1. The array will hold
//the difference of adjacent elements
int diff[] = new int [n - 1 ];
for ( int i = 0 ;
i <
n - 1 ;
i++)
diff[i] = arr[i + 1 ] - arr[i];
// Now find the maximum sum subarray in diff array
int max_diff = diff[ 0 ];
for ( int i = 1 ;
i <
n - 1 ;
i++)
{
if (diff[i - 1 ] >
0 )
diff[i] += diff[i - 1 ];
if (max_diff <
diff[i])
max_diff = diff[i];
}
return max_diff;
}// Driver program to test above functions
public static void main(String[] args)
{
MaximumDiffrence mxdif = new MaximumDiffrence();
int arr[] = { 80 , 2 , 6 , 3 , 100 };
int size = arr.length;
System.out.println(mxdif.maxDiff(arr, size));
}
}
// This code has been contributed by Mayank Jaiswal
Python3
# Python 3 code to find Maximum difference
# between two elements such that larger
# element appears after the smaller numberdef maxDiff(arr, n):
diff = [ 0 ] * (n - 1 )
for i in range ( 0 , n - 1 ):
diff[i] = arr[i + 1 ] - arr[i]# Now find the maximum sum
# subarray in diff array
max_diff = diff[ 0 ]
for i in range ( 1 , n - 1 ):
if (diff[i - 1 ] >
0 ):
diff[i] + = diff[i - 1 ]if (max_diff <
diff[i]):
max_diff = diff[i]return max_diff# Driver program to test above function
arr = [ 80 , 2 , 6 , 3 , 100 ]
size = len (arr)
print ( "Maximum difference is" , maxDiff(arr, size))# This code is contributed by Swetank Modi
C#
// C# code to find Maximum difference
using System;
class GFG {
static int maxDiff( int [] arr, int n)
{// Create a diff array of size n-1.
// The array will hold the
// difference of adjacent elements
int [] diff = new int [n - 1];
for ( int i = 0;
i <
n - 1;
i++)
diff[i] = arr[i + 1] - arr[i];
// Now find the maximum sum
// subarray in diff array
int max_diff = diff[0];
for ( int i = 1;
i <
n - 1;
i++) {
if (diff[i - 1] >
0)
diff[i] += diff[i - 1];
if (max_diff <
diff[i])
max_diff = diff[i];
}
return max_diff;
}// Driver code
public static void Main()
{
int [] arr = { 80, 2, 6, 3, 100 };
int size = arr.Length;
Console.Write(maxDiff(arr, size));
}
}// This code is contributed by Sam007
PHP
<
?php
// PHP program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
function maxDiff( $arr , $n )
{
// Create a diff array of size n-1.
// The array will hold the difference
// of adjacent elements
$diff [ $n -1] = array ();
for ( $i =0;
$i <
$n -1;
$i ++)
$diff [ $i ] = $arr [ $i +1] - $arr [ $i ];
// Now find the maximum sum
// subarray in diff array
$max_diff = $diff [0];
for ( $i =1;
$i <
$n -1;
$i ++)
{
if ( $diff [ $i -1] >
0)
$diff [ $i ] += $diff [ $i -1];
if ( $max_diff <
$diff [ $i ])
$max_diff = $diff [ $i ];
}
return $max_diff ;
}// Driver Code
$arr = array (80, 2, 6, 3, 100);
$n = sizeof( $arr );
// Function calling
echo "Maximum difference is " .
maxDiff( $arr , $n );
// This code is contributed
// by Akanksha Rai
输出如下:
Maximum difference is 98
时间复杂度:
上)
辅助空间:
上)
我们可以修改上述方法以在O(1)额外空间中工作。无需创建辅助数组, 我们可以在同一循环中计算差异和最大和。以下是空间优化版本。
C++
// C++ program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number
#include <
bits/stdc++.h>
using namespace std;
/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
int maxDiff ( int arr[], int n)
{
// Initialize diff, current sum and max sum
int diff = arr[1]-arr[0];
int curr_sum = diff;
int max_sum = curr_sum;
for ( int i=1;
i<
n-1;
i++)
{
// Calculate current diff
diff = arr[i+1]-arr[i];
// Calculate current sum
if (curr_sum >
0)
curr_sum += diff;
else
curr_sum = diff;
// Update max sum, if needed
if (curr_sum >
max_sum)
max_sum = curr_sum;
}return max_sum;
}/* Driver program to test above function */
int main()
{
int arr[] = {80, 2, 6, 3, 100};
int n = sizeof (arr) / sizeof (arr[0]);
// Function calling
cout <
<
"Maximum difference is " <
<
maxDiff(arr, n);
return 0;
}
Java
// Java program to find Maximum
// difference between two elements
// such that larger element appears
// after the smaller number
class GFG
{/* The function assumes that there
are at least two elements in array.
The function returns a negative
value if the array is sorted in
decreasing order and returns 0 if
elements are equal */
static int maxDiff ( int arr[], int n)
{
// Initialize diff, current
// sum and max sum
int diff = arr[ 1 ] - arr[ 0 ];
int curr_sum = diff;
int max_sum = curr_sum;
for ( int i = 1 ;
i <
n - 1 ;
i++)
{
// Calculate current diff
diff = arr[i + 1 ] - arr[i];
// Calculate current sum
if (curr_sum >
0 )
curr_sum += diff;
else
curr_sum = diff;
// Update max sum, if needed
if (curr_sum >
max_sum)
max_sum = curr_sum;
} return max_sum;
} // Driver Code
public static void main(String[] args)
{
int arr[] = { 80 , 2 , 6 , 3 , 100 };
int n = arr.length;
// Function calling
System.out.print( "Maximum difference is " +
maxDiff(arr, n));
}
} // This code is contributed by Smitha
Python3
# Python3 program to find Maximum difference
# between two elements such that larger
# element appears after the smaller number# The function assumes that there are
# at least two elements in array. The
# function returns a negative value if
# the array is sorted in decreasing
# order and returns 0 if elements are equal
def maxDiff (arr, n):# Initialize diff, current
# sum and max sum
diff = arr[ 1 ] - arr[ 0 ]
curr_sum = diff
max_sum = curr_sumfor i in range ( 1 , n - 1 ):# Calculate current diff
diff = arr[i + 1 ] - arr[i]# Calculate current sum
if (curr_sum >
0 ):
curr_sum + = diff
else :
curr_sum = diff# Update max sum, if needed
if (curr_sum >
max_sum):
max_sum = curr_sum
return max_sum# Driver Code
if __name__ = = '__main__' :
arr = [ 80 , 2 , 6 , 3 , 100 ]
n = len (arr)# Function calling
print ( "Maximum difference is" , maxDiff(arr, n))# This code is contributed
# by 29AjayKumar
C#
// C# program to find Maximum
// difference between two elements
// such that larger element appears
// after the smaller number
using System;
class GFG
{/* The function assumes that there
are at least two elements in array.
The function returns a negative
value if the array is sorted in
decreasing order and returns 0 if
elements are equal */
static int maxDiff ( int [] arr, int n)
{
// Initialize diff, current
// sum and max sum
int diff = arr[1] - arr[0];
int curr_sum = diff;
int max_sum = curr_sum;
for ( int i = 1;
i <
n - 1;
i++)
{
// Calculate current diff
diff = arr[i + 1] - arr[i];
// Calculate current sum
if (curr_sum >
0)
curr_sum += diff;
else
curr_sum = diff;
// Update max sum, if needed
if (curr_sum >
max_sum)
max_sum = curr_sum;
} return max_sum;
} // Driver Code
public static void Main()
{
int [] arr = {80, 2, 6, 3, 100};
int n = arr.Length;
// Function calling
Console.WriteLine( "Maximum difference is " +
maxDiff(arr, n));
}
} // This code is contributed
// by Akanksha Rai(Abby_akku)
PHP
<
?php
// PHP program to find Maximum difference
// between two elements such that larger
// element appears after the smaller number/* The function assumes that there are
at least two elements in array. The
function returns a negative value if the
array is sorted in decreasing order and
returns 0 if elements are equal */
function maxDiff ( $arr , $n )
{
// Initialize diff, current sum
// and max sum
$diff = $arr [1] - $arr [0];
$curr_sum = $diff ;
$max_sum = $curr_sum ;
for ( $i = 1;
$i <
$n - 1;
$i ++)
{
// Calculate current diff
$diff = $arr [ $i + 1] - $arr [ $i ];
// Calculate current sum
if ( $curr_sum >
0)
$curr_sum += $diff ;
else
$curr_sum = $diff ;
// Update max sum, if needed
if ( $curr_sum >
$max_sum )
$max_sum = $curr_sum ;
}return $max_sum ;
}// Driver Code
$arr = array (80, 2, 6, 3, 100);
$n = sizeof( $arr );
// Function calling
echo "Maximum difference is " , maxDiff( $arr , $n );
// This code is contributed
// by Sach_code
?>
输出如下:
Maximum difference is 98
时间复杂度:O(n)
辅助空间:O(1)
以下是此问题的变体:
矩阵中两行元素之和的最大差
【两个元素之间的最大差,使得较大的元素出现在较小的数字之后】如果你发现上述代码/算法中的任何错误, 或找到其他解决相同问题的方法, 请发表评论
推荐阅读
- One97面试经验分享和解析|S2
- 亚马逊面试题和面试经验分享|S70(校园实习)
- JavaScript分组运算符用法示例和解析
- C语言中的存储类用法详细指南
- Target公司面试经验|校园招聘2021年分享
- filebeat-收集日志写入到Kafka
- ssl
- 之配置文件说明
- LVS负载均衡群集(NET模式)