# 检查是否可以通过修改至少一个元素来使数组严格增加

2021年4月25日17:08:49 发表评论 524 次浏览

## C ++

``````//C++ implementation of the approach
#include <iostream>
using namespace std;

//Function that returns true if arr[]
//can be made strictly increasing after
//modifying at most one element
bool check( int arr[], int n)
{
//To store the number of modifications
//required to make the array
//strictly increasing
int modify = 0;

//Check whether the first element needs
//to be modify or not
if (arr[0]> arr[1]) {
arr[0] = arr[1] /2;
modify++;
}

//Loop from 2nd element to the 2nd last element
for ( int i = 1; i <n - 1; i++) {

//Check whether arr[i] needs to be modified
if ((arr[i - 1] <arr[i] && arr[i + 1] <arr[i])
|| (arr[i - 1]> arr[i] && arr[i + 1]> arr[i])) {

//Modifying arr[i]
arr[i] = (arr[i - 1] + arr[i + 1]) /2;

//Check if arr[i] is equal to any of
//arr[i-1] or arr[i+1]
if (arr[i] == arr[i - 1] || arr[i] == arr[i + 1])
return false ;

modify++;
}
}

//Check whether the last element needs
//to be modify or not
if (arr[n - 1] <arr[n - 2])
modify++;

//If more than 1 modification is required
if (modify> 1)
return false ;

return true ;
}

//Driver code
int main()
{
int arr[] = { 2, 4, 8, 6, 9, 12 };
int n = sizeof (arr) /sizeof (arr[0]);

if (check(arr, n))
cout <<"Yes" <<endl;
else
cout <<"No" <<endl;

return 0;
}``````

## Java

``````//Java implementation of the approach
class GFG {

//Function that returns true if arr[]
//can be made strictly increasing after
//modifying at most one element
static boolean check( int arr[], int n)
{
//To store the number of modifications
//required to make the array
//strictly increasing
int modify = 0 ;

//Check whether the first element needs
//to be modify or not
if (arr[ 0 ]> arr[ 1 ]) {
arr[ 0 ] = arr[ 1 ] /2 ;
modify++;
}

//Loop from 2nd element to the 2nd last element
for ( int i = 1 ; i <n - 1 ; i++) {

//Check whether arr[i] needs to be modified
if ((arr[i - 1 ] <arr[i] && arr[i + 1 ] <arr[i])
|| (arr[i - 1 ]> arr[i] && arr[i + 1 ]> arr[i])) {

//Modifying arr[i]
arr[i] = (arr[i - 1 ] + arr[i + 1 ]) /2 ;

//Check if arr[i] is equal to any of
//arr[i-1] or arr[i+1]
if (arr[i] == arr[i - 1 ] || arr[i] == arr[i + 1 ])
return false ;

modify++;
}
}

//Check whether the last element needs
//to be modify or not
if (arr[n - 1 ] <arr[n - 2 ])
modify++;

//If more than 1 modification is required
if (modify> 1 )
return false ;

return true ;
}

//Driver code
public static void main(String[] args)
{

int [] arr = { 2 , 4 , 8 , 6 , 9 , 12 };
int n = arr.length;

if (check(arr, n))
System.out.print( "Yes" );
else
System.out.print( "No" );
}
}``````

## C#

``````//C# implementation of the approach
using System;

class GFG
{

//Function that returns true if arr[]
//can be made strictly increasing after
//modifying at most one element
static bool check( int []arr, int n)
{
//To store the number of modifications
//required to make the array
//strictly increasing
int modify = 0;

//Check whether the first element needs
//to be modify or not
if (arr[0]> arr[1])
{
arr[0] = arr[1] /2;
modify++;
}

//Loop from 2nd element to the 2nd last element
for ( int i = 1; i <n - 1; i++)
{

//Check whether arr[i] needs to be modified
if ((arr[i - 1] <arr[i] && arr[i + 1] <arr[i])
|| (arr[i - 1]> arr[i] && arr[i + 1]> arr[i]))
{

//Modifying arr[i]
arr[i] = (arr[i - 1] + arr[i + 1]) /2;

//Check if arr[i] is equal to any of
//arr[i-1] or arr[i+1]
if (arr[i] == arr[i - 1] || arr[i] == arr[i + 1])
return false ;

modify++;
}
}

//Check whether the last element needs
//to be modify or not
if (arr[n - 1] <arr[n - 2])
modify++;

//If more than 1 modification is required
if (modify> 1)
return false ;

return true ;
}

//Driver code
public static void Main()
{

int [] arr = { 2, 4, 8, 6, 9, 12 };
int n = arr.Length;

if (check(arr, n))
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
}

//This code is contributed by AnkitRai01``````

## Python 3

``````# Python 3 implementation of above approach

# Function that returns true if arr[]
# can be made strictly increasing after
# modifying at most one element
def check( arr, n):

# To store the number of modifications
# required to make the array
# strictly increasing
modify = 0

# Check whether the first element needs
# to be modify or not
if (arr[ 0 ]> arr[ 1 ]) :
arr[ 0 ] = arr[ 1 ] //2
modify + = 1

# Loop from 2nd element to the 2nd last element
for i in range ( 1 , n - 1 ):

# Check whether arr[i] needs to be modified
if ((arr[i - 1 ] <arr[i] and arr[i + 1 ] <arr[i])
or (arr[i - 1 ]> arr[i] and arr[i + 1 ]> arr[i])):

# Modifying arr[i]
arr[i] = (arr[i - 1 ] + arr[i + 1 ]) //2

# Check if arr[i] is equal to any of
# arr[i-1] or arr[i+1]
if (arr[i] = = arr[i - 1 ] or arr[i] = = arr[i + 1 ]):
return False

modify + = 1

# Check whether the last element needs
# to be modify or not
if (arr[n - 1 ] <arr[n - 2 ]):
modify + = 1

# If more than 1 modification is required
if (modify> 1 ):
return False

return True

# Driver code
if __name__ = = "__main__" :
arr = [ 2 , 4 , 8 , 6 , 9 , 12 ]
n = len (arr)

if (check(arr, n)):
print ( "Yes" )
else :
print ( "No" )

# This code is contributed by ChitraNayal``````

``Yes``