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

โค้ด C++ นับ Local Extrema ของอาร์เรย์

โจทย์: อาร์เรย์ A ขนาด n A[i] เป็น local minimum ถ้าน้อยกว่าทั้งสองข้าง อย่างเคร่งครัด เป็น local maximum ถ้ามากกว่าทั้งสองข้าง A[0] และ A[n-1] ไม่นับ หาจำนวน local extrema

Input: A=[1,5,2,5] → Output: 2 (5 ตำแหน่ง 1 เป็น maxima, 2 ตำแหน่ง 2 เป็น minima)

ขั้นตอนแก้

sum := 0
for i := 1 to n-2:
    if (A[i] < A[i-1] && A[i] < A[i+1]) || (A[i] > A[i-1] && A[i] > A[i+1]):
        sum++
return sum

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

#include <bits/stdc++.h>
using namespace std;
int solve(vector<int> A) {
    int sum = 0, n = A.size();
    for (int i = 1; i < n-1; i++)
        if ((A[i] < A[i-1] && A[i] < A[i+1]) || (A[i] > A[i-1] && A[i] > A[i+1]))
            sum++;
    return sum;
}
int main() {
    vector<int> A = {1,5,2,5};
    cout << solve(A) << endl;
}

Input

{1,5,2,5}

Output

2