Mündəricat
Problem bəyanat
"Monotonik Array" problemində bizə bir sıra verilir. Bizim vəzifəmiz massivin a olub olmadığını yoxlamaqdır monoton massiv ya yox.
Monotonik bir sıra, elementlərin ya artan qaydada, ya da azalan qaydada sıralandığı bir massivdir. Bir sıra artan qaydada sıralanırsa, bir sıra arr [üçün], arr [i] <= arr [i + 1]. Azalan sırada sıralanan bir sıra üçün arr [i]> = arr [i + 1].
Funksiya yalnız sıra monoton olduqda true qayıtmalıdır. Əks təqdirdə, saxta qayıdın.
misal
arr={1,2,4,5}
true
Explanation: Hər bir sıra üçün verilən massivdə [i]
Yanaşma
Bu problemi həll etmək üçün monotonik massivin nə olduğunu aydın başa düşmək çox vacibdir.
monotonik bir sıra dizinin indeksindəki indeks nömrəsi ilə dəyər arasında bir qrafik çəksək, ya artan, ya da azalan qrafik quran bir sıra. Aşağıdakı şəkil monotonik artan və azalan qrafiki göstərir.
Bu problemə yanaşma kimidir, serialı keçərək arr [i] <= arr [i + 1] yoxlayaraq artan bir sıra olduğunu yoxlayacağıq. Əgər bu artan bir sıradırsa, onda verilən sıra monotonik bir massivdir, əks halda yenidən massivi keçib arr [i]> = arr [i + 1] olub olmadığını yoxlayaraq azalan bir sıra olduğunu yoxlayacağıq. Azalan bir sıradırsa, verilmiş sıra monotonik bir massivdir, əks halda monotonik bir sıra deyil.
Dizinin yalnız bir keçiddən istifadə edərək artdığını və ya azaldığını da yoxlaya bilərik. İki bayraq isincr və isdec istifadə edəcəyik və true ilə başladacağıq. A [i]> A [i + 1] olarsa isincr yalan, A [i] <A [i + 1] olarsa isdec yalan olar. massiv monotonikdirsə, ən azı isincr və isdec biri doğru olacaqdır. Hər ikisi də yalan olduqda massiv monoton olmur, çünki hər iki yalan dəyər massivdəki dəyərin həm artdığını, həm də azaldığını göstərir.
Kodu
C ++ Monotonik Array LeetCode Solution
#include <bits/stdc++.h> using namespace std; bool isMonotonic(vector<int>& A) { bool isincr = true; bool isdec = true; int n=A.size(); for (int i = 0; i < n- 1; ++i) { if (A[i] > A[i+1]) isincr = false; if (A[i] < A[i+1]) isdec = false; } return isincr || isdec; } int main() { vector<int> arr = {1,2,4,5}; cout <<boolalpha; cout<<isMonotonic(arr)<<endl; return 0; }
true
Java Monotonik Array LeetCode Solution
import java.util.Arrays; public class Tutorialcup { public static boolean isMonotonic(int[] A) { boolean isincr = true; boolean isdec = true; int n=A.length; for (int i = 0; i < n- 1; ++i) { if (A[i] > A[i+1]) isincr = false; if (A[i] < A[i+1]) isdec = false; } return isincr || isdec; } public static void main(String[] args) { int [] arr = {1,2,4,5}; boolean ans= isMonotonic(arr); System.out.println(ans); } }
true
Monotonik Arrayın Mürəkkəblik Analizi
Zaman mürəkkəbliyi
Yuxarıdakı kodun zaman mürəkkəbliyi O (n) çünki monotonik bir sıra olub olmadığını yoxlamaq üçün yalnız bir dəfə serialı gəzirik. Burada n giriş massivinin ölçüsüdür.
Kosmik mürəkkəblik
Yuxarıdakı kodun kosmik mürəkkəbliyi O (1) çünki cavabları saxlamaq üçün yalnız dəyişəndən istifadə edirik.