एक अन्तराल दायरा लीटकोड समाधानमा बिजोर नम्बरहरू गणना गर्नुहोस्


कठिनाई तह सजिलो
बारम्बार सोधिन्छ माइक्रोसफ्ट
गणित

समस्या वक्तव्य

यस समस्यामा हामीलाई दुई नकारात्मक inteणात्मक पूर्णा low्क कम र उच्च दिइन्छ। हामीले फेला पार्नु पर्छ कि कति अन्तराल संख्याहरू दिइएको अन्तराल दायरा [कम, उच्च] मा छन्।

उदाहरणका

low = 3, high = 7
3

व्याख्या:

And र between बीचको बिजोर नम्बरहरू [,,,,]] हुन्।

low = 8, high = 10
1

व्याख्या:

And र १० बिचको अजीब संख्या []] हो।

दृष्टिकोण

दिइएको अन्तराल दायरामा बिजोर नम्बरहरूको कुल गणना पत्ता लगाउने एउटा तरिका अन्तरालको बायाँ देखि दायाँ सीमाना पार गर्नु हो। लुप र प्रत्येक बिजोर संख्याको लागि बिजोर काउन्टर बढाउनुहोस्। तर दायरामा बिजोर संख्या गणना गर्न यो धेरै नै लंगडो दृष्टिकोण हुनेछ। यसले लिनखोर समयको जटिलता लिनेछ, र हामी त्यस्तो सजिलो समस्याको लागि चाहँदैनौं।

दिइएको अन्तराल दायरामा कुल बिजोर संख्याहरू पत्ता लगाउन यो एकदम सजिलो छ किनकि हामी जान्दछौं एक अन्तराल दायरामा लगभग आधा सम र आधा बिजोर नम्बरहरू छन्।
तर हामीले अन्तरालको सीमालाई ध्यानपूर्वक विचार गर्नुपर्दछ। त्यसोभए हामी के गर्न सक्छौं हामी पहिलो एन प्राकृतिक नम्बरहरूमा बिजोर नम्बरहरूको गणनाको लागि सूत्र बनाउन सक्छौं। यसलाई गणना गर्न दिनुहोस् [n]। तब कम र उच्च बीचको बिजोर नम्बरहरू बराबर हुनेछ:
गणना [कम, उच्च] = गणना [उच्च] - गणना [कम -१]।

एक अन्तराल दायरा लीटकोड समाधानमा बिजोर नम्बरहरू गणना गर्नुहोस्

अब गणनाको लागि केहि उदाहरणहरू लिइरहेको छ [i]:

गणना [१] = १
गणना [१] = १
गणना [१] = १
गणना [१] = १
गणना [१] = १

हामी गणना गर्न सक्दछौं [n] = (n + १) / २
यसैले गणना गर्नुहोस् [कम, उच्च] = (उच्च + १) / २ - कम / २

कार्यान्वयन

सी ++ प्रोग्राम (भोली दृष्टिकोण) एक अन्तराल दायरा लीटकोड समाधानमा ओड नम्बर गणना गर्नुहोस्

#include <iostream>
using namespace std;

int countOdds(int low, int high) 
{
    int count=0;
    for(int i=low;i<=high;i++)
        if(i%2==1) count++;
        
    return count;
}

int main()
{
    int low=3,high=7;  
    cout<< countOdds(low, high) <<endl;
}
3

जाभा प्रोग्राम (भोली दृष्टिकोण) एक अन्तराल दायरा लीटकोड समाधानमा बेजोड संख्याहरूको गणना गर्न

class CountOdd
{  
    public static int countOdds(int low, int high) 
    {
        int count=0;
        for(int i=low;i<=high;i++)
            if(i%2==1) count++;
        
        return count;
    }
    
    public static void main(String args[])
    {
        int low=3,high=7;
        System.out.println(countOdds(low, high));
    }
}
3

C ++ कार्यक्रम (इष्टतम दृष्टिकोण)

#include <iostream>
using namespace std;

int countOdds(int low, int high) 
{
   return (high + 1) / 2 - low / 2;       
}

int main()
{
    int low=3,high=7;  
    cout<< countOdds(low, high) <<endl;
}
3

जावा कार्यक्रम (इष्टतम दृष्टिकोण)

class CountOdd
{  
    public static int countOdds(int low, int high) 
    {
        return (high + 1) / 2 - low / 2;   
    }
    
    public static void main(String args[])
    {
        int low=3,high=7;
        System.out.println(countOdds(low, high));
    }
}
3

एक अन्तराल दायरा लीटकोड समाधानमा गणना गणनाको लागी जटिलता विश्लेषण

समय जटिलता

प्रत्येक नम्बर को लागी ट्रयाफेरिंग ले लिन्छ ऊ) सूत्र जडान गर्दा उत्तर गणना गर्दा समय जटिलता स्थिर समय लाग्छ O (१) कार्यान्वयन गर्न।

ठाउँ जटिलता 

O (१): दुबै समाधानहरूमा कुनै अतिरिक्त खाली स्थान प्रयोग गरिँदैन भेरिएबललाई बाहेक उत्तरहरू भण्डार गर्न प्रयोग गरिन्छ।