ზედიზედ სამი შანსის Leetcode ამოხსნა


Რთული ტური Easy
ხშირად ეკითხებიან დჯი
Array

პრობლემის განცხადება

”სამი ზედიზედ შანსების” პრობლემში ჩვენ მოგვცეს მასივი და ჩვენ უნდა შეამოწმოთ, არის თუ არა მასივი ზედიზედ სამი უცნაური რიცხვი, თუ არა. თუ ის არსებობს, მაშინ ჩვენ უნდა დავუბრუნდეთ true- ს, თორემ false- ს დავუბრუნდებით.

მაგალითი

arr = [2,6,4,1]
false

განმარტება:

ზედიზედ სამი შანსი არ არსებობს. აქედან გამომდინარე, ყალბი დაბრუნება.

arr = [1,2,34,3,4,5,7,23,12]
true

განმარტება:

მოცემულ მასივში თუ გადავამოწმებთ სამივე ზედიზედ ელემენტის სეგმენტს. ეს იქნება შემდეგი:

ზედიზედ სამი შანსის Leetcode ამოხსნა

[5, 7, 23] ზედიზედ სამი კოეფიციენტია. აქედან გამომდინარე, დაბრუნდი ჭეშმარიტი.

მიდგომა

ეს არის მარტივი პრობლემა, რომლის მოგვარებაც შესაძლებელია მოცემული მასივის ერთი გადაკვეთის გამოყენებით. გავლის დროს ჩვენ უნდა შეამოწმოთ სამივე ზედიზედ ელემენტი. წერტილს, რომელიც სამივე რიცხვს უცნაურად მიგვაჩნია, ვუბრუნდებით ჭეშმარიტს.

ამისათვის შეგვიძლია გამოვიყენოთ for მარყუჟი და შეგვიძლია განმეორდეს თითოეული ჯგუფის მესამე ელემენტისთვის (3 ზედიზედ ელემენტი) ინდექსიდან = 2 ინდექსით = n-1. შემდეგ მიმდინარე ზედიზედ სეგმენტი წარმოდგენილი იქნება arr [i-2], arr [i-1] და arr [i] ელემენტებით.
ჩვენ დავიწყებთ განმეორებას მესამე ელემენტიდან წინა მხრიდან. თუ მასივის ზომა სამზე ნაკლებია, მაშინ ვუბრუნდებით false- ს.

ალგორითმი

  1. შექმენით i ცვლადი და წამოვიყენოთ ინდექსი 2-ით.
  2. აწარმოებს მარყუჟისთვის მე ბოლო ელემენტამდე, (n-1) ინდექსამდე.
  3. შეამოწმეთ i, (i-1) და (i-2) ინდექსების ელემენტი უცნაურია თუ არა.
  4. თუ სამივე უცნაურია, დაბრუნდი ჭეშმარიტი. სხვა გზა გააგრძელეთ.
  5. ყველა ინდექსის გადაკვეთის შემდეგ, დაბრუნდით false.

განხორციელება

C ++ პროგრამა ზედიზედ სამი შანსის Leetcode ამოხსნისთვის

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

bool threeConsecutiveOdds(vector<int>& arr) 
{
    int n=arr.size();

    for(int i = 2; i < n; i++) 
    {
        if(arr[i] % 2 == 1 && arr[i-1] % 2 == 1 && arr[i-2] % 2 == 1 )
        return true;
    }

    return false;

}

int main() 
{
    vector<int> arr={1,2,34,3,4,5,7,23,12};
    
    if(threeConsecutiveOdds(arr) )
        cout<<"true"<<endl;
    else
        cout<<"no"<<endl;

  return 0; 
}
true

ჯავას პროგრამა ზედიზედ სამი შანსის Leetcode ამოხსნისთვის

import java.lang.*;

class Rextester
{  
    public static boolean threeConsecutiveOdds(int[] arr) {

        int n=arr.length;

        for(int i = 2; i < n; i++) 
        {
            if(arr[i] % 2 == 1 && arr[i-1] % 2 == 1 && arr[i-2] % 2 == 1 )
            return true;
        }

        return false;

    }
    
    public static void main(String args[])
    {
       int[] arr={1,2,34,3,4,5,7,23,12};
    
       System.out.println(threeConsecutiveOdds(arr));
   
    }
}
true

სირთულის ანალიზი ზედიზედ სამი კოეფიციენტის Leetcode ამოხსნისთვის

დროის სირთულე

O (N): სადაც N არის მოცემული მასივის ზომა. რადგან თითოეული ინდექსისთვის მხოლოდ ერთხელ გავდივართ, დროის სირთულე იქნება O (N).

სივრცის სირთულე 

O (1): ჩვენ არ ვიყენებთ დამატებით მეხსიერებას. შესაბამისად, სივრცის სირთულე მუდმივი იქნება.