سه شانس متوالی راه حل کد


سطح دشواری ساده
اغلب در دیجی
صف

بیان مسأله

در مسئله "سه شانس متوالی" به ما داده شده است صف و ما باید بررسی کنیم که آیا سه عدد فرد متوالی در آرایه وجود دارد یا خیر. اگر آن وجود داشته باشد ، پس باید درست برگردیم وگرنه نادرست برمی گردیم.

مثال

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

توضیح:

سه احتمال متوالی وجود ندارد. از این رو نادرست برگردید.

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

شرح:

در آرایه داده شده اگر هر سه بخش عنصر متوالی را بررسی کنیم. این به شرح زیر است:

سه شانس متوالی راه حل کد

[5 ، 7 ، 23] سه شانس متوالی هستند. از این رو بازگشت درست است.

روش

این یک مسئله ساده است که می تواند با استفاده از یک جدول عبور از آرایه داده شده حل شود. در طول پیمایش باید هر سه عنصر متوالی را بررسی کنیم. نکته ای که هر سه عدد فرد را پیدا می کنیم ، درست برمی گردیم.

برای این کار می توانیم از حلقه for استفاده کنیم و می توانیم برای عنصر سوم هر گروه (3 عنصر متوالی) از index = 2 به index = n-1 تکرار کنیم. سپس بخش متوالی فعلی با عناصر arr [i-2] ، arr [i-1] و arr [i] نمایش داده می شود.
تکرار را از سومین عنصر از جلو شروع خواهیم کرد. اگر اندازه آرایه کمتر از سه باشد ، مقدار false را برمی گردانیم.

الگوریتم

  1. یک متغیر i ایجاد کرده و با شاخص 2 مقداردهی اولیه می کنیم.
  2. اجرای یک برای حلقه برای من تا آخرین عنصر ، (n-1) th th index.
  3. بررسی کنید که آیا عنصر در شاخص های i ، (i-1) و (i-2) عجیب است یا خیر.
  4. اگر هر سه فرد عجیب است ، درست برگردید. دیگر مسیر را ادامه دهید.
  5. پس از عبور از تمام شاخص ها ، نادرست برگردید.

پیاده سازی

برنامه C ++ برای سه شانس متوالی راه حل کد

#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

برنامه جاوا برای سه شانس متوالی راه حل کد

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

تجزیه و تحلیل پیچیدگی برای سه شانس متوالی راه حل کد

پیچیدگی زمان

بر) : جایی که N اندازه آرایه داده شده است. همانطور که برای هر شاخص فقط یک بار پیمایش می کنیم ، پیچیدگی زمان O (N) خواهد بود.

پیچیدگی فضا 

O (1): ما از هیچ حافظه اضافی استفاده نمی کنیم. از این رو پیچیدگی فضا ثابت خواهد بود.