Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หา Peak Element ในอาร์เรย์ 2 มิติด้วย C++

ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่หา peak element ในอาร์เรย์ 2 มิติ

องค์ประกอบเรียกว่า peak element หากองค์ประกอบรอบข้างทั้งหมดน้อยกว่าองค์ประกอบนั้น มาดูขั้นตอนในการแก้ปัญหา

  • เริ่มต้นอาร์เรย์ 2 มิติด้วยข้อมูลจำลอง
  • วนลูปผ่านอาร์เรย์ 2 มิติ
    • ก่อนอื่น ตรวจสอบองค์ประกอบมุมของอาร์เรย์ 2 มิติ
    • ต่อไป เขียนเงื่อนไขสำหรับแถวแรกและแถวสุดท้ายของอาร์เรย์ 2 มิติ
    • ตอนนี้ ตรวจสอบคอลัมน์แรกและคอลัมน์สุดท้ายของอาร์เรย์ 2 มิติ
    • และสุดท้าย ตรวจสอบองค์ประกอบกลาง
    • ในแต่ละกรณี เราต้องเปรียบเทียบองค์ประกอบปัจจุบันกับองค์ประกอบรอบข้าง มันแตกต่างกันไปตามเงื่อนไขข้างต้น
    • คืนค่าที่พบผลลัพธ์

ตัวอย่างโค้ด

#include <bits/stdc++.h>
using namespace std;

const int MAX = 256;

int findPeakElement(int arr[][MAX], int rows, int columns) {
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            if (i == 0 && j == 0) {
                if (arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j + 1]) {
                    return arr[i][j];
                }
            } else if (i == 0 && j == columns - 1) {
                if (arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j - 1]) {
                    return arr[i][j];
                }
            } else if (i == rows - 1 && j == 0) {
                if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i][j + 1]) {
                    return arr[i][j];
                }
            } else if (i == rows - 1 && j == columns - 1) {
                if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i][j - 1]) {
                    return arr[i][j];
                }
            } else if (i == 0) {
                if (arr[i][j] > arr[i][j - 1] && arr[i][j] > arr[i][j + 1] && arr[i][j] > arr[i + 1][j]) {
                    return arr[i][j];
                }
            } else if (i == rows - 1) {
                if (arr[i][j] > arr[i][j - 1] && arr[i][j] > arr[i][j + 1] && arr[i][j] > arr[i - 1][j]) {
                    return arr[i][j];
                }
            } else if (j == 0) {
                if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j + 1]) {
                    return arr[i][j];
                }
            } else if (j == columns - 1) {
                if (arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i + 1][j] && arr[i][j] > arr[i][j - 1]) {
                    return arr[i][j];
                }
            } else {
                if (arr[i][j] > arr[i][j - 1] && arr[i][j] > arr[i][j + 1] && arr[i][j] > arr[i - 1][j] && arr[i][j] > arr[i + 1][j]) {
                    return arr[i][j];
                }
            }
        }
    }
    return -1;
}

int main() {
    int arr[][MAX] = {
        {1, 2, 3, 4},
        {2, 3, 4, 5},
        {1, 3, 7, 5},
        {1, 2, 6, 6}
    };
    int rows = 4, columns = 4;
    cout << findPeakElement(arr, rows, columns) << endl;
    return 0;
}

ผลลัพธ์

ถ้าคุณรันโค้ดด้านบน คุณจะได้ผลลัพธ์ดังนี้

7

สรุป

หากคุณมีคำถามในบทช่วยสอนนี้ ให้ระบุในส่วนความคิดเห็น