سوال شماره ۱ – پیدا کردن شکاف باینری با بیشترین طول

سوال شماره ۱ – پیدا کردن شکاف باینری با بیشترین طول نوشته شده در   javascript ۱۷ خرداد , ۱۳۹۸ توسط  عباس حسینی

یک شکاف باینری در یک عدد صحیح مثبت ، مجموعه ای از صفر های پشت سر هم میباشد که از هر دو طرف توسط اعداد یک محاصره شده اند

به عنوان مثال، عدد ۹ دارای نمایش باینری ۱۰۰۱ است و تعداد شکاف های آن ۱ است، زیرا یک بار مجموعه از صفر متوالی بین اعداد یک محاصره شده است و عدد ۵۲۹ دارای نمایش باینری ۱۰۰۰۰۱۰۰۰۱ است که  شامل دو شکاف باینری است یکی به طول ۴ و دیگری به طول ۳

الگوریتم شماره ۱ – یافتن شکاف باینری با بیشترین طول

صورت مسئله

با توجه به توضیحات مطرح شده در رابطه با شکاف باینری بیشترین طول شکافی که یک عدد مثبت صحیح در نمایش باینری خود میتواند داشته باشد را بیابید ؟

مثلا عدد ۵۲۹ دارای نمایش باینری ۱۰۰۰۰۱۰۰۰۱ است که طول بیشترین شکاف در آن ۴ میباشد

حل مسئله

برای حل این مسئله ابتدا عدد اعلام شده را باید به عدد باینری یا دودویی تبدیل کرد و در جاوا اسکریپت برای تبدیل عدد به نمایش دودویی از تابع زیر استفاده میکنیم


parseInt(n).toString(2)

حال برای پیدا کردن شکاف باینری با بیشترین طول دو متغیر به نام maxGap و temp تشکیل میدهیم و مقدار هر دو را برابر با صفر قرار میدهیم و شروع میکنیم تمام عناصر را یکی یکی پیمایش میکنم و با هر بار دیدن عدد صفر یکی به مقدار متغیر maxGap می افزاییم و با دیدن عدد یک مقدار آن را برابر صفر قرار میدهیم و هر بار تعداد صفرهای متوالی را داخل یک متغیر به نام temp نگهداری میکنیم تا در انتهای پیمایش طول بیشترین شکاف را در آن داشته باشیم


function solution(N) {
    var temp = 0  ;
    var maxGap = 0;
    var binary = parseInt(N).toString(2);

    for (var i = 0; i< binary.length;i++) {
        var letter = binary.charAt(i);
        if (letter == 0) {
            maxGap++
        }
        else {
            if (maxGap >temp) {
                temp = maxGap;
            }
            maxGap = 0   
        }
    }
    return temp
}