📌  相关文章
📜  给定数组的arr [i]%arr [j]的最大值

📅  最后修改于: 2021-04-24 05:38:24             🧑  作者: Mango

给定数组arr [] ,任务是找到所有可能对的arr [i]%arr [j]的最大值。

例子:

天真的方法:运行两个嵌套循环,并为每对计算arr [i]%arr [j]的值。根据计算出的值更新答案。

下面是上述方法的实现:

C++
// C++ implementation of the above approach
#include 
using namespace std;
  
// Function to return maximum value of
// arr[i] % arr[j]
int computeMaxValue(const int* arr, int n)
{
    int ans = 0;
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
  
            // Check pair (x, y) as well as 
            // (y, x) for maximum value
            int val = max(arr[i] % arr[j], 
                          arr[j] % arr[i]);
  
            // Update the answer
            ans = max(ans, val);
        }
    }
    return ans;
}
  
// Driver code
int main()
{
    int arr[] = { 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << computeMaxValue(arr, n);
    return 0;
}


Java
// Java implementation of the above approach
  
import java.util.*;
class GFG
{
      
    // Function to return maximum value of
    // arr[i] % arr[j]
    static int computeMaxValue(int []arr, int n)
    {
        int ans = 0;
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++) {
      
                // Check pair (x, y) as well as 
                // (y, x) for maximum value
                int val = Math.max(arr[i] % arr[j], 
                            arr[j] % arr[i]);
      
                // Update the answer
                ans = Math.max(ans, val);
            }
        }
        return ans;
    }
      
    // Driver code
    public static void main(String []args)
    {
        int []arr = { 2, 3 };
        int n = arr.length;
        System.out.println(computeMaxValue(arr, n));
          
    }
  
}
  
// This code is contributed
// by ihritik


Python3
# Python3  implementation of the above approach
  
# Function to return maximum value of
# arr[i] % arr[j]
def computeMaxValue(arr, n):
  
    ans = 0
    for i in range(0, n-1):
        for j in range( i+1, n):
  
            # Check pair (x, y) as well as 
            # (y, x) for maximum value
            val = max(arr[i] % arr[j], arr[j] % arr[i])
  
            # Update the answer
            ans = max(ans, val)
          
      
    return ans
  
  
# Driver code
arr = [ 2, 3 ]
n = len(arr)
print(computeMaxValue(arr, n))
          
# This code is contributed
# by ihritik


C#
// C# implementation of the above approach
  
using System;
class GFG
{
      
    // Function to return maximum value of
    // arr[i] % arr[j]
    static int computeMaxValue(int []arr, int n)
    {
        int ans = 0;
        for (int i = 0; i < n - 1; i++) {
            for (int j = i + 1; j < n; j++) {
      
                // Check pair (x, y) as well as 
                // (y, x) for maximum value
                int val = Math.Max(arr[i] % arr[j], 
                            arr[j] % arr[i]);
      
                // Update the answer
                ans = Math.Max(ans, val);
            }
        }
        return ans;
    }
      
    // Driver code
    public static void Main()
    {
        int []arr = { 2, 3 };
        int n = arr.Length;
        Console.WriteLine(computeMaxValue(arr, n));
          
    }
  
}
  
// This code is contributed
// by ihritik


PHP


C++
// C++ implementation of the above approach
#include 
using namespace std;
  
// Function to return maximum value of
// arr[i] % arr[j]
int computeMaxValue(const int* arr, int n)
{
    bool allSame = true;
    int i = 1;
    while (i < n) {
  
        // If current element is different
        // from the previous element
        if (arr[i] != arr[i - 1]) {
            allSame = false;
            break;
        }
        i++;
    }
  
    // If all the elements of the array are equal
    if (allSame)
        return 0;
  
    // Maximum element from the array
    int max = *std::max_element(arr, arr + n);
    int secondMax = 0;
    for (i = 0; i < n; i++) {
        if (arr[i] < max && arr[i] > secondMax)
            secondMax = arr[i];
    }
  
    // Return the second maximum element
    // from the array
    return secondMax;
}
  
// Driver code
int main()
{
    int arr[] = { 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << computeMaxValue(arr, n);
    return 0;
}


Java
// Java implementation of the above approach
class GFG
{
  
// Function to return maximum value of
// arr[i] % arr[j]
static int computeMaxValue(int arr[], int n)
{
    boolean allSame = true;
    int i = 1;
    while (i < n) 
    {
  
        // If current element is different
        // from the previous element
        if (arr[i] != arr[i - 1]) 
        {
            allSame = false;
            break;
        }
        i++;
    }
  
    // If all the elements of the 
    // array are equal
    if (allSame)
        return 0;
  
    // Maximum element from the array
    int max = -1;
    for(i = 0; i < n; i++)
    {
        if(max < arr[i])
        max = arr[i];
    }
    int secondMax = 0;
    for (i = 0; i < n; i++)
    {
        if (arr[i] < max && arr[i] > secondMax)
            secondMax = arr[i];
    }
  
    // Return the second maximum element
    // from the array
    return secondMax;
}
  
// Driver code
public static void main(String[] args)
{
    int []arr = { 2, 3 };
    int n = arr.length;
    System.out.println(computeMaxValue(arr, n));
}
}
  
// This code is contributed
// by 29AjayKumar


Python3
# Python3 implementation of the 
# above approach 
  
# Function to return maximum value 
# of arr[i] % arr[j] 
def computeMaxValue(arr, n) :
      
    allSame = True; 
    i = 1; 
    while (i < n) : 
  
        # If current element is different 
        # from the previous element 
        if (arr[i] != arr[i - 1]) :
            allSame = False
            break
          
        i += 1
      
    # If all the elements of the 
    # array are equal 
    if (allSame) :
        return 0
  
    # Maximum element from the array 
    max_element = max(arr) 
      
    secondMax = 0
    for i in range(n) :
        if (arr[i] < max_element and 
            arr[i] > secondMax) :
            secondMax = arr[i] 
      
    # Return the second maximum element 
    # from the array 
    return secondMax
  
# Driver code 
if __name__ == "__main__" :
    arr = [ 2, 3 ] 
    n = len(arr)
      
    print(computeMaxValue(arr, n))
  
# This code is contributed by Ryuga


C#
// C# implementation of the above approach
using System;
  
class GFG
{
  
// Function to return maximum value of
// arr[i] % arr[j]
static int computeMaxValue(int[] arr, int n)
{
    bool allSame = true;
    int i = 1;
    while (i < n) 
    {
  
        // If current element is different
        // from the previous element
        if (arr[i] != arr[i - 1]) 
        {
            allSame = false;
            break;
        }
        i++;
    }
  
    // If all the elements of the 
    // array are equal
    if (allSame)
        return 0;
  
    // Maximum element from the array
    int max = -1;
    for(i = 0; i < n; i++)
    {
        if(max < arr[i])
        max = arr[i];
    }
    int secondMax = 0;
    for (i = 0; i < n; i++)
    {
        if (arr[i] < max && arr[i] > secondMax)
            secondMax = arr[i];
    }
  
    // Return the second maximum element
    // from the array
    return secondMax;
}
  
// Driver code
public static void Main()
{
    int[] arr = { 2, 3 };
    int n = arr.Length;
    Console.Write(computeMaxValue(arr, n));
}
}
  
// This code is contributed by Ita_c.


PHP
 $secondMax)
            $secondMax = $arr[$i];
    }
  
    // Return the second maximum 
    // element from the array
    return $secondMax;
}
  
// Driver code
$arr = array(2, 3);
$n = sizeof($arr);
echo computeMaxValue($arr, $n);
  
// This code is contributed by ajit.
?>


输出:
2

高效方法:A A和B为最大可能值时,将产生A% B的最大值。换句话说,结果将是数组中第二大的元素,但当数组的所有元素都相同时(在这种情况下,结果将为0 )。

下面是上述方法的实现:

C++

// C++ implementation of the above approach
#include 
using namespace std;
  
// Function to return maximum value of
// arr[i] % arr[j]
int computeMaxValue(const int* arr, int n)
{
    bool allSame = true;
    int i = 1;
    while (i < n) {
  
        // If current element is different
        // from the previous element
        if (arr[i] != arr[i - 1]) {
            allSame = false;
            break;
        }
        i++;
    }
  
    // If all the elements of the array are equal
    if (allSame)
        return 0;
  
    // Maximum element from the array
    int max = *std::max_element(arr, arr + n);
    int secondMax = 0;
    for (i = 0; i < n; i++) {
        if (arr[i] < max && arr[i] > secondMax)
            secondMax = arr[i];
    }
  
    // Return the second maximum element
    // from the array
    return secondMax;
}
  
// Driver code
int main()
{
    int arr[] = { 2, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);
    cout << computeMaxValue(arr, n);
    return 0;
}

Java

// Java implementation of the above approach
class GFG
{
  
// Function to return maximum value of
// arr[i] % arr[j]
static int computeMaxValue(int arr[], int n)
{
    boolean allSame = true;
    int i = 1;
    while (i < n) 
    {
  
        // If current element is different
        // from the previous element
        if (arr[i] != arr[i - 1]) 
        {
            allSame = false;
            break;
        }
        i++;
    }
  
    // If all the elements of the 
    // array are equal
    if (allSame)
        return 0;
  
    // Maximum element from the array
    int max = -1;
    for(i = 0; i < n; i++)
    {
        if(max < arr[i])
        max = arr[i];
    }
    int secondMax = 0;
    for (i = 0; i < n; i++)
    {
        if (arr[i] < max && arr[i] > secondMax)
            secondMax = arr[i];
    }
  
    // Return the second maximum element
    // from the array
    return secondMax;
}
  
// Driver code
public static void main(String[] args)
{
    int []arr = { 2, 3 };
    int n = arr.length;
    System.out.println(computeMaxValue(arr, n));
}
}
  
// This code is contributed
// by 29AjayKumar

Python3

# Python3 implementation of the 
# above approach 
  
# Function to return maximum value 
# of arr[i] % arr[j] 
def computeMaxValue(arr, n) :
      
    allSame = True; 
    i = 1; 
    while (i < n) : 
  
        # If current element is different 
        # from the previous element 
        if (arr[i] != arr[i - 1]) :
            allSame = False
            break
          
        i += 1
      
    # If all the elements of the 
    # array are equal 
    if (allSame) :
        return 0
  
    # Maximum element from the array 
    max_element = max(arr) 
      
    secondMax = 0
    for i in range(n) :
        if (arr[i] < max_element and 
            arr[i] > secondMax) :
            secondMax = arr[i] 
      
    # Return the second maximum element 
    # from the array 
    return secondMax
  
# Driver code 
if __name__ == "__main__" :
    arr = [ 2, 3 ] 
    n = len(arr)
      
    print(computeMaxValue(arr, n))
  
# This code is contributed by Ryuga

C#

// C# implementation of the above approach
using System;
  
class GFG
{
  
// Function to return maximum value of
// arr[i] % arr[j]
static int computeMaxValue(int[] arr, int n)
{
    bool allSame = true;
    int i = 1;
    while (i < n) 
    {
  
        // If current element is different
        // from the previous element
        if (arr[i] != arr[i - 1]) 
        {
            allSame = false;
            break;
        }
        i++;
    }
  
    // If all the elements of the 
    // array are equal
    if (allSame)
        return 0;
  
    // Maximum element from the array
    int max = -1;
    for(i = 0; i < n; i++)
    {
        if(max < arr[i])
        max = arr[i];
    }
    int secondMax = 0;
    for (i = 0; i < n; i++)
    {
        if (arr[i] < max && arr[i] > secondMax)
            secondMax = arr[i];
    }
  
    // Return the second maximum element
    // from the array
    return secondMax;
}
  
// Driver code
public static void Main()
{
    int[] arr = { 2, 3 };
    int n = arr.Length;
    Console.Write(computeMaxValue(arr, n));
}
}
  
// This code is contributed by Ita_c.

的PHP

 $secondMax)
            $secondMax = $arr[$i];
    }
  
    // Return the second maximum 
    // element from the array
    return $secondMax;
}
  
// Driver code
$arr = array(2, 3);
$n = sizeof($arr);
echo computeMaxValue($arr, $n);
  
// This code is contributed by ajit.
?>
输出:
2