Leitcode Solution сандарынын жуп сандары менен сандарды табуу


Кыйынчылык деңгээли жеңил
Көп суралган Quora
согуштук тизме

Бул маселеде, бизге берилет согуштук тизме оң сандардын Жуп сандар менен сандардын санын табышыбыз керек.

мисал

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

түшүндүрүү: 34 жана 3434 гана сандардын жуп санына ээ сандар. Ошентип, биз 2 басып чыгарабыз.

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

түшүндүрүү: Берилген массивде сандардын жуп санына ээ бүтүн сан жок.

жакындоо

Бул маселенин өзөгү - бүтүн сандагы цифралардын санын эсептөө. Эгерде биз муну жасай алсак, анда массивдеги ар бир бүтүн сан үчүн процессти кайталап, жуп сандарга ээ болгон сандардын санын эсептей алабыз. Бинардык сүрөттөлүштөрдө, биз берилген санды нөлгө айланганга чейин туура жылдырсак болот (же аны 2ге бөлсөк) бит ичинде. Ошо сыяктуу эле, цифраларды эсептөө үчүн, биз бүтүн санды экиге бөлө алабыз 10 ал болуп калбаса 0. Бул ыкма каалаган базага туура келет.

Leitcode Solution сандарынын жуп сандары менен сандарды табуу

 

Algorithm

  1. Биз функцияны түзөбүз findNumbers () ага өткөн ар кандай массивдеги жуп сандык цифраларга ээ сандардын санын табуу
  2. Ошондой эле, биз жардамчы функциясын түзөбүз numberOfDigits () ага берилген бүтүн сандагы цифралардын санын төмөнкүчө кайтаруу:
    1. чыгаруу CNT = 0
    2. бүтүн сан, n 0 дан чоң:
      1. көбөйтүү CNT, cnt ++
      2. бөлүнүү n by 10, n / = 10
    3. кайра CNT
  3. Initialize жыйынтык Жуп сандарга ээ сандардын санын эсептөө үчүн = 0
  4. Массивдеги ар бир элемент үчүн:
    1. андагы сандардын санын эсептөө аркылуу алабыз numberOfDigits () милдети
    2. Эгерде алынган сандардын саны жуп болсо:
      1. Көбөйтүү натыйжасы, натыйжа ++
  5. Return result

Сандардын жуп сандары бар Табуу сандарын колдонуу Leetcode Чечими

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;
}

Java программасы

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

Сандардын жуп сандары бар Табуу сандарынын татаалдыгын талдоо Leetcode Чечими

Убакыт татаалдыгы

Убакыттын татаалдыгы O (N) мында N = массивдин чоңдугу, биз массивдин бир өтүүсүн жасаганда жана сандардын саны туруктуу убакытта алынат.

Космостун татаалдыгы

O (1) анткени биз туруктуу эс тутумун гана колдонобуз.