数组中(arr[i]-i)-(arr[j]-j)的最大值

给定一个数组,arr[]找到(arr[i]-i)-(arr[j]-j)的最大值,其中i不等于j。其中i和j从0到n-1变化,n是输入数组arr[]的大小。 例如:

null
Input : arr[] = {9, 15, 4, 12, 13}Output : 12We get the maximum value for i = 1 and j = 2(15 - 1) - (4 - 2) = 12Input : arr[] = {-1, -2, -3, 4, 10}Output : 6We get the maximum value for i = 4 and j = 2(10 - 4) - (-3 - 2) = 11

一个重要的观察结果是,(arr[i]-i)-(arr[j]-j)的值永远不能为负。我们总是可以交换i和j,将负值转换成正值。所以i不等于j的条件是假的,不需要显式检查。 方法1(天真:O(n) 2. )) 这个想法是运行两个循环来考虑所有可能的对,并跟踪表达式的最大值(ARR [i] -i)-(ARR[J] -J)。下面是这个想法的实施。

C++

// C++ program to find maximum value (arr[i]-i)
// - (arr[j]-j) in an array.
#include<bits/stdc++.h>
using namespace std;
// Returns maximum value of (arr[i]-i) - (arr[j]-j)
int findMaxDiff( int arr[], int n)
{
if (n < 2)
{
cout << "Invalid " ;
return 0;
}
// Use two nested loops to find the result
int res = INT_MIN;
for ( int i=0; i<n; i++)
for ( int j=0; j<n; j++)
if ( res < (arr[i]-arr[j]-i+j) )
res = (arr[i]-arr[j]-i+j);
return res;
}
// Driver program
int main()
{
int arr[] = {9, 15, 4, 12, 13};
int n = sizeof (arr)/ sizeof (arr[0]);
cout << findMaxDiff(arr, n);
return 0;
}


JAVA

// Java program to find maximum value (arr[i]-i)
// - (arr[j]-j) in an array.
import java.util.*;
class GFG {
// Returns maximum value of
// (arr[i]-i) - (arr[j]-j)
static int findMaxDiff( int arr[], int n)
{
if (n < 2 ) {
System.out.print( "Invalid " );
return 0 ;
}
// Use two nested loops to find the result
int res = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
for ( int j = 0 ; j < n; j++)
if (res < (arr[i] - arr[j] - i + j))
res = (arr[i] - arr[j] - i + j);
return res;
}
// Driver code
public static void main(String[] args)
{
int arr[] = { 9 , 15 , 4 , 12 , 13 };
int n = arr.length;
System.out.print(findMaxDiff(arr, n));
}
}
// This code is contributed by Anant Agarwal.


Python3

# Python program to find
# maximum value (arr[i]-i)
# - (arr[j]-j) in an array.
# Returns maximum value of
# (arr[i]-i) - (arr[j]-j)
def findMaxDiff(arr,n):
if (n < 2 ):
print ( "Invalid " )
return 0
# Use two nested loops
# to find the result
res = - 2147483648
for i in range (n):
for j in range (n):
if ( res < (arr[i] - arr[j] - i + j) ):
res = (arr[i] - arr[j] - i + j)
return res
# Driver code
arr = [ 9 , 15 , 4 , 12 , 13 ]
n = len (arr)
print (findMaxDiff(arr, n))
# This code is contributed
# by Anant Agarwal.


C#

// C# program to find maximum
// value (arr[i]-i)- (arr[j]-j)
// in an array.
using System;
class GFG {
// Returns maximum value of
// (arr[i]-i) - (arr[j]-j)
static int findMaxDiff( int []arr, int n)
{
if (n < 2) {
Console.WriteLine( "Invalid " );
return 0;
}
// Use two nested loops to
// find the result
int res = int .MinValue;
for ( int i = 0; i < n; i++)
for ( int j = 0; j < n; j++)
if (res < (arr[i] - arr[j] - i + j))
res = (arr[i] - arr[j] - i + j);
return res;
}
// Driver code
public static void Main()
{
int []arr = {9, 15, 4, 12, 13};
int n = arr.Length;
Console.WriteLine(findMaxDiff(arr, n));
}
}
// This code is contributed by anjuj_67.


PHP

<?php
// PHP program to find maximum value
// (arr[i]-i) - (arr[j]-j) in an array.
// Returns maximum value of
// (arr[i]-i) - (arr[j]-j)
function findMaxDiff( $arr , $n )
{
if ( $n < 2)
{
echo "Invalid " ;
return 0;
}
// Use two nested loops to
// find the result
$res = PHP_INT_MIN;
for ( $i = 0; $i < $n ; $i ++)
for ( $j = 0; $j < $n ; $j ++)
if ( $res < ( $arr [ $i ] - $arr [ $j ] - $i + $j ))
$res = ( $arr [ $i ] - $arr [ $j ] - $i + $j );
return $res ;
}
// Driver Code
$arr = array (9, 15, 4, 12, 13);
$n = count ( $arr );
echo findMaxDiff( $arr , $n );
// This code is contributed by anuj_67.
?>


Javascript

<script>
// JavaScript program to find maximum
// value (arr[i]-i)- (arr[j]-j)
// in an array.
// Returns maximum value of
// (arr[i]-i) - (arr[j]-j)
function findMaxDiff(arr, n)
{
if (n < 2) {
document.write( "Invalid " );
return 0;
}
// Use two nested loops to
// find the result
let res = Number.MIN_VALUE;
for (let i = 0; i < n; i++)
for (let j = 0; j < n; j++)
if (res < (arr[i] - arr[j] - i + j))
res = (arr[i] - arr[j] - i + j);
return res;
}
let arr = [9, 15, 4, 12, 13];
let n = arr.length;
document.write(findMaxDiff(arr, n));
</script>


输出:

12

方法2(技巧:O(n)) 1) 在整个数组中找到arr[i]–i的最大值。 2) 求整个数组中arr[i]–i的最小值。 3) 返回上述两个值的差值。

C++

// C++ program to find maximum value (arr[i]-i)
// - (arr[j]-j) in an array.
#include<bits/stdc++.h>
using namespace std;
// Returns maximum value of (arr[i]-i) - (arr[j]-j)
int findMaxDiff( int a[], int n)
{
if (n < 2)
{
cout << "Invalid " ;
return 0;
}
// Find maximum of value of arr[i] - i for all
// possible values of i. Let this value be max_val.
// Find minimum of value of arr[i] - i for all
// possible values of i. Let this value be min_val.
// The difference max_val - min_v
int min_val = INT_MAX, max_val =
INT_MIN;
for ( int i=0; i<n; i++)
{
if ((a[i]-i) > max_val)
max_val = a[i] - i;
if ((a[i]-i) < min_val)
min_val = a[i]-i;
}
return (max_val - min_val);
}
// Driver program
int main()
{
int arr[] = {9, 15, 4, 12, 13};
int n = sizeof (arr)/ sizeof (arr[0]);
cout << findMaxDiff(arr, n);
return 0;
}


JAVA

// Java program to find maximum value (arr[i]-i)
// - (arr[j]-j) in an array.
import java.io.*;
class GFG {
// Returns maximum value of (arr[i]-i) -
// (arr[j]-j)
static int findMaxDiff( int arr[], int n)
{
if (n < 2 )
{
System.out.println( "Invalid " );
return 0 ;
}
// Find maximum of value of arr[i] - i
// for all possible values of i. Let
// this value be max_val. Find minimum
// of value of arr[i] - i for all
// possible values of i. Let this value
// be min_val. The difference max_val -
// min_v
int min_val = Integer.MAX_VALUE,
max_val = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
{
if ((arr[i]-i) > max_val)
max_val = arr[i] - i;
if ((arr[i]-i) < min_val)
min_val = arr[i]-i;
}
return (max_val - min_val);
}
// Driver program
public static void main(String[] args)
{
int arr[] = { 9 , 15 , 4 , 12 , 13 };
int n = arr.length;
System.out.println(findMaxDiff(arr, n));
}
}
// This code is contributed by Prerna Saini


Python3

# Python 3 program to find maximum value
# (arr[i]-i) - (arr[j]-j) in an array.
import sys
# Returns maximum value of
# (arr[i]-i) - (arr[j]-j)
def findMaxDiff(a, n):
if (n < 2 ):
print ( "Invalid " )
return 0
# Find maximum of value of arr[i] - i
# for all possible values of i. Let
# this value be max_val. Find minimum
# of value of arr[i] - i for all possible
# values of i. Let this value be min_val.
# The difference max_val - min_v
min_val = sys.maxsize
max_val = - sys.maxsize - 1
for i in range (n):
if ((a[i] - i) > max_val):
max_val = a[i] - i
if ((a[i] - i) < min_val):
min_val = a[i] - i
return (max_val - min_val)
# Driver Code
if __name__ = = '__main__' :
arr = [ 9 , 15 , 4 , 12 , 13 ]
n = len (arr)
print (findMaxDiff(arr, n))
# This code is contributed by Rajput-Ji


C#

// C# program to find maximum value (arr[i]-i)
// - (arr[j]-j) in an array.
using System;
class GFG {
// Returns maximum value of (arr[i]-i) -
// (arr[j]-j)
static int findMaxDiff( int []arr, int n)
{
if (n < 2)
{
Console.Write( "Invalid " );
return 0;
}
// Find maximum of value of arr[i] - i
// for all possible values of i. Let
// this value be max_val. Find minimum
// of value of arr[i] - i for all
// possible values of i. Let this value
// be min_val. The difference max_val -
// min_v
int min_val = int .MaxValue,
max_val = int .MinValue;
for ( int i = 0; i < n; i++)
{
if ((arr[i] - i) > max_val)
max_val = arr[i] - i;
if ((arr[i] - i) < min_val)
min_val = arr[i] - i;
}
return (max_val - min_val);
}
// Driver program
public static void Main()
{
int []arr = {9, 15, 4, 12, 13};
int n = arr.Length;
Console.Write(findMaxDiff(arr, n));
}
}
// This code is contributed by nitin mittal.


PHP

<?php
// PHP program to find maximum value
// (arr[i]-i) - (arr[j]-j) in an array.
// Returns maximum value of
// (arr[i]-i) - (arr[j]-j)
function findMaxDiff( $a , $n )
{
if ( $n < 2)
{
echo "Invalid " ;
return 0;
}
// Find maximum of value of arr[i] - i
// for all possible values of i. Let
// this value be max_val. Find minimum
// of value of arr[i] - i for all
// possible values of i. Let this value
// be min_val. The difference max_val - min_v
$min_val = PHP_INT_MAX;
$max_val = PHP_INT_MIN;
for ( $i = 0; $i < $n ; $i ++)
{
if (( $a [ $i ] - $i ) > $max_val )
$max_val = $a [ $i ] - $i ;
if (( $a [ $i ] - $i ) < $min_val )
$min_val = $a [ $i ] - $i ;
}
return ( $max_val - $min_val );
}
// Driver Code
$arr = array (9, 15, 4, 12, 13);
$n = sizeof( $arr );
echo findMaxDiff( $arr , $n );
// This code is contributed by Sachin.
?>


Javascript

<script>
// Javascript program to find
// maximum value (arr[i]-i)
// - (arr[j]-j) in an array.
// Returns maximum value of (arr[i]-i) -
// (arr[j]-j)
function findMaxDiff(arr, n)
{
if (n < 2)
{
document.write( "Invalid " );
return 0;
}
// Find maximum of value of arr[i] - i
// for all possible values of i. Let
// this value be max_val. Find minimum
// of value of arr[i] - i for all
// possible values of i. Let this value
// be min_val. The difference max_val -
// min_v
let min_val =
Number.MAX_VALUE, max_val = Number.MIN_VALUE;
for (let i = 0; i < n; i++)
{
if ((arr[i] - i) > max_val)
max_val = arr[i] - i;
if ((arr[i] - i) < min_val)
min_val = arr[i] - i;
}
return (max_val - min_val);
}
let arr = [9, 15, 4, 12, 13];
let n = arr.length;
document.write(findMaxDiff(arr, n));
</script>


输出:

12

本文由 希瓦姆·阿格拉瓦尔 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享