العثور على أرقام مع عدد زوجي من حل Leetcode


مستوى الصعوبة سهل
كثيرا ما يطلب في قرة
مجموعة

في هذه المشكلة ، حصلنا على مجموعة من الأعداد الصحيحة الموجبة. علينا إيجاد عدد الأعداد التي تحتوي على عدد زوجي من الأرقام.

مثال

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

تفسير: 34 و 3434 فقط هي الأعداد الصحيحة مع عدد زوجي من الأرقام. لذلك ، نطبع 2.

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

تفسير: لا يوجد عدد صحيح يحتوي على عدد زوجي من الأرقام في المصفوفة المحددة.

الرسالة

جوهر هذه المشكلة هو حساب عدد الأرقام في عدد صحيح. إذا تمكنا من القيام بذلك ، فيمكننا تكرار العملية لكل عدد صحيح في المصفوفة وإحصاء عدد الأعداد الصحيحة التي تحتوي على عدد زوجي من الأرقام. في التمثيلات الثنائية ، يمكننا إزاحة عدد صحيح معين (أو تقسيمه على 2) حتى يصبح صفرًا لحساب عدد بت فيه. وبالمثل ، بالنسبة لحساب الأرقام ، يمكننا الاستمرار في قسمة عدد صحيح على 10 ما لم يصبح 0. هذه الطريقة صحيحة لأي قاعدة.

العثور على أرقام مع عدد زوجي من حل Leetcode

 

خوارزمية

  1. نقوم بإنشاء وظيفة findNumbers () للعثور على عدد الأعداد الصحيحة التي تحتوي على عدد زوجي من الأرقام في أي مصفوفة يتم تمريرها إليها
  2. أيضًا ، نقوم بإنشاء دالة مساعدة numberOfDigits () لإرجاع عدد الأرقام في عدد صحيح تم تمريره إليه على النحو التالي:
    1. تهيئة المركز الوطني للاستشعار = 0
    2. بينما العدد الصحيح ، n أكبر من 0:
      1. زيادة المركز الوطني للاستشعار, cnt ++
      2. تفرق n by 10 ، ن / = 10
    3. عائد أعلى المركز الوطني للاستشعار
  3. تهيئة نتيجة = 0 لتخزين عدد الأعداد الصحيحة التي تحتوي على عدد زوجي من الأرقام
  4. لكل عنصر في المصفوفة:
    1. نسترجع عدد الأرقام الموجودة فيه باستخدام numberOfDigits () وظيفة
    2. إذا كان عدد الأرقام التي تم الحصول عليها زوجيًا:
      1. نتيجة الزيادة ، النتيجة ++
  5. نتيجة العودة

تنفيذ البحث عن أرقام مع عدد زوجي من حل 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;
}

برنامج جافا

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 للأرقام

تعقيد الوقت

تعقيد الوقت على) حيث N = حجم المصفوفة كما نقوم بتمرير واحد للصفيف ويتم استرجاع عدد الأرقام في وقت ثابت.

تعقيد الفضاء

يا (1) حيث نستخدم مساحة ذاكرة ثابتة فقط.