संख्याको समेत संख्या पत्ता लगाउनुहोस् लेटकोड समाधान


कठिनाई तह सजिलो
बारम्बार सोधिन्छ Quora
एरे

यस समस्यामा, हामीलाई एक दिइन्छ array सकारात्मक पूर्णांकको। हामीले संख्याको समान संख्याको साथ संख्याहरूको गणना पाउन आवश्यक छ।

उदाहरणका

Array = {123 , 34 , 3434 , 121 , 100}
2

स्पष्टीकरण: केवल and and र 34 3434 संख्याको समान संख्याको साथ पूर्णा .्क हुन्। त्यसो भए, हामी २ प्रिन्ट गर्दछौं।

Array = {1 , 111 , 11111 , 12345}
0

स्पष्टीकरण: दिइएको एर्रेमा संख्याको समान संख्याको साथ पूर्णांक छैन।

दृष्टिकोण

यस समस्याको मुख्य एक पूर्णांकमा अ digit्कहरूको संख्या गणना गर्न हो। यदि हामी त्यो गर्न सक्दछौं भने, तब हामी एर्रेमा प्रत्येक पूर्णांकको लागि प्रक्रिया दोहोर्याउन सक्छौं र संख्याको समान संख्या भएको पूर्णांक संख्या गणना गर्न सक्छौं। बाइनरी प्रतिनिधित्वमा, हामी सही ईन्टिजर सिफ्ट गर्न सक्दछौं (वा यसलाई २ ले विभाजन गर्नुहोस्) जबसम्म यो शुन्य नहुन् बिट यसमा। त्यस्तै गरी, अंकहरू गणना गर्न, हामी पूर्णा div्क लाई विभाजन गर्न सक्छौं 10 यो नभएसम्म 0। यो विधि कुनै पनि आधारका लागि सही छ।

संख्याको समेत संख्या पत्ता लगाउनुहोस् लेटकोड समाधान

 

अल्गोरिदम

  1. हामी एउटा प्रकार्य सिर्जना गर्छौं FindNumbers () कुनै पनि एरेमा पास भएको अ even्कको संख्या भएको पूर्णाgers्कहरूको गणना पाउन
  2. साथै, हामी एक सहयोगी प्रकार्य सिर्जना गर्दछौं numberOfDigits () पूर्णांकमा अंकको संख्या फिर्ता गर्नका लागि यसमा पारित गरियो:
    1. प्रारम्भ गर्नुहोस् CNT = 0
    2. जबकि पूर्णांक, n ० भन्दा ठूलो हुन्छ:
      1. वृद्धि CNT, cnt ++
      2. विभाजन गर्नुहोस् n by १०, n / = १०
    3. फिर्ती CNT
  3. आरम्भ गर्नुहोस् परिणाम = ० अ even्कको समान संख्या भएको पूर्णांकको गणनालाई भण्डारण गर्न
  4. एर्रेमा प्रत्येक तत्वको लागि:
    1. हामी यसको प्रयोग गरेर अंकहरूको गणना पुनःप्राप्त गर्छौं numberOfDigits () समारोह
    2. यदि प्राप्त अंकको संख्या पनि हो:
      1. वृद्धि परिणाम, परिणाम ++
  5. परिणाम फिर्ता

संख्याको लेटकोड समाधानको साथ संख्या खोज्नुहोस् कार्यान्वयन

C ++ कार्यक्रम

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

int numberOfDigits(int n)
{
    int cnt = 0;
    while(n > 0)
    {
        n /= 10;
        cnt++;
    }
    return cnt;
}

int findNumbers(vector <int> &a)
{
    int result = 0;
    for(int &i : a)
        if(numberOfDigits(i) % 2 == 0)
            result++;

    return result;
}

int main()
{
    vector <int> a = {123 , 34 , 3434 , 121 , 100};
    cout << findNumbers(a) << '\n';
    return 0;
}

जावा कार्यक्रम

class find_numbers
{
    public static void main(String args[])
    {
        int[] a = {123 , 34 , 3434 , 121 , 100};
        System.out.println(findNumbers(a));
    }

    static int numberOfDigits(int n)
    {
        int cnt = 0;
        while(n > 0)
        {
            n /= 10;
            cnt++;
        }
        return cnt;
    }

    static int findNumbers(int[] a)
    {
        int result = 0;
        for(int i = 0 ; i < a.length ; i++)
            if(numberOfDigits(a[i]) % 2 == 0)
                result++;

        return result;
    }
}
2

नम्बरहरूको लेटकोड समाधानको साथ संख्याहरू पत्ता लगाउने जटिलता विश्लेषण

समय जटिलता

समय जटिलता हो O (N) जहाँ एन = एर्रेको आकार जब हामी एर्रेको एकल पास गर्छौं र अंकको संख्या स्थिर समयमा पुनः प्राप्त हुन्छ।

ठाउँ जटिलता

O (१) किनकि हामी केवल स्थिर मेमोरी स्पेस मात्र प्रयोग गर्छौं।