Computer >> Máy Tính >  >> Lập trình >> lập trình C

Hiệu số lớn nhất giữa hai phần tử sao cho phần tử lớn hơn xuất hiện sau số nhỏ hơn trong C


Chúng ta được cung cấp với một mảng các số nguyên có kích thước N. Mảng bao gồm các số nguyên theo thứ tự ngẫu nhiên. Nhiệm vụ là tìm sự khác biệt lớn nhất giữa hai phần tử sao cho phần tử lớn hơn xuất hiện sau số nhỏ hơn. Đó là Arr [j] -Arr [i] là cực đại sao cho j> i.

Đầu vào

Arr[] = { 2,1,3,8,3,19,21}.

Đầu ra −Sự khác biệt lớn nhất giữa hai phần tử sao cho phần tử lớn hơn xuất hiện sau số nhỏ hơn - 20

Giải thích - Sự khác biệt lớn nhất giữa 21 và 1 và 21 xuất hiện sau 1 trong mảng.

Đầu vào

Arr[] = {18, 2,8,1,2,3,2,6 }.

Đầu ra −Sự khác biệt lớn nhất giữa hai phần tử sao cho phần tử lớn hơn xuất hiện sau số nhỏ hơn - 6

Giải thích - Sự khác biệt lớn nhất giữa 8 và 2 và 8 xuất hiện sau 2 trong mảng.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Khai báo một mảng các số nguyên chứa các cặp cạnh của hình chữ nhật. (Arr [])

  • Tạo một biến để lưu trữ kích thước của mảng. (n)

  • Hàm maxArea (int arr [], int n) được sử dụng để tính diện tích tối đa cho hình chữ nhật. Nó nhận một mảng đầu vào và kích thước của nó làm đối số.

  • Bên trong maxArea (), chúng tôi đã khai báo một mảng Dim [2] hai lưu trữ hai cạnh cao nhất được tìm thấy sau khi duyệt qua mảng đã sắp xếp (theo thứ tự giảm dần) arr [].

  • Vì arr [] được sắp xếp theo thứ tự giảm dần, 4 cạnh cao nhất phải ở đầu. Chúng tôi sẽ lặp lại arr [] sao cho tìm thấy một cặp cạnh.

  • Khởi tạo Dim [] bằng 0 lúc đầu.

  • Bên trong vòng lặp while, chúng tôi đặt điều kiện rằng nó tiếp tục cho đến khi j <2 mà không có giá trị nào được tìm thấy cho dim [0] và dim [1] hoặc đạt đến cuối arr []. (i

  • Nếu tìm thấy một cặp cạnh như vậy, (if (arr [i] ==arr [i + 1])), thì lưu trữ nó trong dim [j] và tăng j cho cạnh tiếp theo.

  • Trả về kết quả dưới dạng tích số của dim [0] và dim [1].

  • Lưu ý - sort (arr, n) được cho là sắp xếp arr theo thứ tự giảm dần.

Ví dụ

#include <stdio.h>
int maxDiff(int arr[], int n){
   // Maximum difference found so far
   int MD = arr[1] - arr[0];
   // Minimum number visited so far
   int min = arr[0];
   for(int i = 1; i < n; i++){
      if (arr[i] - min > MD)
         MD = arr[i] - min;
      if (arr[i] < min)
         min = arr[i];
   }
   return MD;
}
/* Driver program to test above function */
int main(){
   int arr[] = {2,5,7,3,4,12};
   int n=6;
   // Function calling
   printf("Maximum difference is : %d ",maxDiff(arr, n));
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

The maximum difference between two elements such that the larger element appears after the smaller number : 10