A counting technique for an apparent intractable problem

The following problem is a variation of a hacker-rank problem (this one: https://www.hackerrank.com/challenges/picking-numbers). Given a set of M numbers (M ~= 10,000) and a number N (say N = 5), write an algorithm to find the largest set amongst the M numbers such that the difference between any element of that subset is less than N. For example, if the set of M numbers is {1, 2, 3, 7} and N = 3, then the largest set that matches the criteria defined would be {1, 2, 3}. Notice that the difference between any of these numbers is always less than 3 (also, you may assume the numbers of the set M are within a known range, say M[i] in [1,1000]).

There is a linear solution to this problem using constant memory, but let’s first analyze the not-so-optimal solutions. Testing subsets by subsets is clearly intractable given that the number of subsets for a set of 10,000 elements is a massive number. Another solution could be to sort the set and then for each element get the largest subset by traversing the sorted set with 2 nested loops. It might be a feasible approach, with a pros of constant memory, however the big-O time expectation is still quite large: NLogN (the sorting) + N^2 (the two nested loops), which yields O(100,000,000). Certainly doable in a reasonable laptop, but still the moment that we move the M by one extra zero (M=100,000) it becomes intractable, so I consider this solution very limited.

The key to solve this problem in linear time and constant memory is the somewhat casual comment towards the end of the problem statement: “Also, you may assume the numbers of the set M are within a known range, say M[i] in [1,1000].”. That innocent statement unlocks the key to solve the problem in linear time with constant memory.
Given that the numbers will all fall within a fixed range, between 1 and 1000, we can count all the occurrences of these numbers by using an integer array of length 1000 (call this array S). Then, let’s think about the core of the problem: find the largest subset of numbers whose difference between any element is < N. Well, when we look at the array S, like pick an index within this array say index 4, one possible solution are all the numbers that fall into positions S[4], S[5], S[6], S[7] and S[8]. All these numbers differ by less than 5. We can do that for all the indexes in the array S, and for each index check the partial solution for the N consecutive indexes, and keep track of the max number of elements. That’s it! This loop only takes 1000*N, and the memory is constant (1000).

Let’s come up with the final big-O for this algorithm: M (initial parsing adding the numbers to S) + 1000*N. Since we assume that M >> N, then we have a final time complexity of O(M).

The image below is an explanation of the code to solve the problem, and the actual code is down below for reference. Counting techniques like this one are commonly used when the problem is constrained to finite and small ranges. Cheers, Marcelo.


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
class Solution
{

    static void Main(String[] args)
    {
        int n = 1000;
        int m = 10000000;
        int[] randomNumbers = new int[m];

        int minRange = 1;
        int maxRange = 10000;
        Random rd = new Random();
        for (int i = 0; i < randomNumbers.Length; i++)
            randomNumbers[i] = rd.Next(minRange, maxRange + 1);

        int[] slots = new int[maxRange + 1];
        for (int i = 0; i < randomNumbers.Length; i++)
            slots[randomNumbers[i]]++;

        int maxSetOfNumbers = 0;
        int solutionIndex = 0;
        for (int i = 0; i < slots.Length - n; i++)
        {
            int partialSum = 0;
            for (int j = 0; j < n; j++)
                partialSum += slots[i + j];

            if(partialSum > maxSetOfNumbers)
            {
                maxSetOfNumbers = partialSum;
                solutionIndex = i;
            }
        }

        Console.WriteLine("Max set of numbers: {0}", maxSetOfNumbers);

        /* debug only
        Console.Write("Numbers: ");
        for (int i = 0; i < n; i++)
            for (int j = 0; j < slots[solutionIndex + i]; j++)
                Console.Write("{0} ", solutionIndex + i);
        Console.WriteLine();
        */
    }
}

Comments

  1. well done, Marcelo! When solving a hackerrank problem I actually didn't even bother to use count sort and used a regular sort, but there is really no need to have 2 nested loops with O(N^2) complexity to find the largest subset - there is only one loop necessary to update start and end indices of a window containing elements satisfying a problem requirement.

    Solution to a hackerrank problem is below (http://ideone.com/SPt4H9):

    #include
    #include
    #include
    using namespace std;

    int main() {
    int n; cin >> n;
    vector numbers(n);
    for (int i = 0; i < n; ++i) cin >> numbers[i];
    sort(numbers.begin(), numbers.end());
    int start = 0;
    int end = 0;
    int length = 0;
    int max_length = length;
    while (start <= end && end < n) {
    if (numbers[end] - numbers[start] <= 1) {
    length += 1;
    end += 1;
    max_length = max(max_length, length);
    } else {
    length -= 1;
    start += 1;
    }
    }
    cout << max_length << endl;
    return 0;
    }

    In order to solve a more generic problem, all we need is to change difference variable value.

    ReplyDelete
  2. āļĢ้āļ­āļĒāđ„āļŦāļĄ
    āļĢ้āļ­āļĒāđ„āļŦāļĄāļ›āļĢัāļšāļĢูāļ›āļŦāļ™้āļē āļ›āļĢัāļšāļĢูāļ›āļŦāļ™้āļēāļ—ี่āđ„āļŦāđ„āļ™āļ”ี āļĢ้āļ­āļĒāđ„āļŦāļĄāļ—ี่āđāļŦ่āļ‡āđ„āļŦāļ™āļ”ี? āļัāļ‡āļ™ัāļĄāļŠāļ–āļēāļ™āļžāļĒāļēāļšāļēāļĨāđ€āļ›็āļ™āļ„āļģāļ•āļ­āļšāđ„āļĄ่āļ§่āļēāļˆāļ°āđ€āļ›็āļ™ āļĢ้āļ­āļĒāđ„āļŦāļĄāļŦāļ™้āļēāđ€āļĢีāļĒāļ§ āđ€āļ›็āļ™āļ§ีāđ„āļĨāļ™์āđāļšāļšāļ›āļĢāļ°āđ€āļ—āļĻāđ€āļāļēāļŦāļĨีāļ”้āļ§āļĒāđ„āļŦāļĄāļ้āļēāļ‡ āđƒāļŦ้āļ—่āļēāļ™āļ‡āļēāļĄāđāļšāļšāļ›āļĢāļ°āđ€āļ—āļĻāđ€āļāļēāļŦāļĨี āļĨāļ”āļ­āļēāļĒุ āļŦāļ™้āļēāđ€āļ”็āļ āđ„āļĄ่āđ€āļˆ็āļš āđ„āļĄ่āļšāļ­āļšāļŠ้āļģ āđ„āļĄ่āļšāļ§āļĄ āļŦāļ™้āļēāđ€āļ›็āļ™āļ§ีāđ€āļŠāļŸ āļĨāļ”āđ€āļŦāļ™ีāļĒāļ‡ āđ€āļŦāļ™ีāļĒāļ‡āļāļĢāļ°āļŠัāļšāļŠāļĄāļ›āļĢāļēāļĢāļ–āļ™āļēāļĢ้āļ­āļĒāđ„āļŦāļĄ
    āļĢ้āļ­āļĒāđ„āļŦāļĄāļŦāļ™้āļēāđ€āļĢีāļĒāļ§
    āļĢ้āļ­āļĒāđ„āļŦāļĄ āļ§ีāđ€āļŠāļŸ
    āļĢ้āļ­āļĒāđ„āļŦāļĄāļ้āļēāļ‡āļ›āļĨāļē

    ReplyDelete
  3. 4 āļˆุāļ”āđ€āļ”่āļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļĨืāļ­āļāļĨ่āļ™āđ€āļāļĄ āļŠāļĨ็āļ­āļ• pussy888
    āļŠāļģāļŦāļĢัāļšāļœู้āļ—ี่āļŠื่āļ­āļ™āļ–ูāļāđƒāļˆāļāļēāļĢāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์ āđāļĨāļ°āļ็āļ”ูāđ€āļāļĄāļ„āļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์ āđ€āļิāļ”āđ€āļĢื่āļ­āļ‡āđ„āļĄ่āļ”ี āđ„āļĄ่āļŠāļĄāļ„āļ§āļĢāļ—ี่āļˆāļ°āđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™ āļˆāļģāđ€āļ›็āļ™āļ•้āļ­āļ‡āļāļĨ่āļēāļ§āļ§่āļē āđƒāļ™āļŠāļģāļŦāļĢัāļšāļšāļēāļ‡āļšุāļ„āļ„āļĨāđāļĨ้āļ§ āļāļēāļĢāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļŠāļĨ็āļ­āļ• pussy888 āļšāļēāļ‡āļ—ีāļ็āļ­āļēāļˆāļˆāļ°āđ€āļ›็āļ™āļ­ีāļāļŦāļ™ึ่āļ‡āļ•ัāļ§āļŠ่āļ§āļĒ āļ­ีāļāļŦāļ™ึ่āļ‡āļŦāļ™āļ—āļēāļ‡āļŠāļģāļŦāļĢัāļšāđƒāļ™āļāļēāļĢāļ—āļģāđ€āļ‡ิāļ™āļ—ี่āļŠāļēāļĄāļēāļĢāļ–āļˆāļ°āļŠ่āļ§āļĒāđƒāļŦ้āļœู้āđ€āļĨ่āļ™āđ€āļāļĄ āļŠāļēāļĄāļēāļĢāļ–āļŦāļēāđ€āļ‡ิāļ™āđ€āļžิ่āļĄāđƒāļŦ้āļัāļšāļ„āļĢāļ­āļšāļ„āļĢัāļ§āļ•āļ™āđ€āļ­āļ‡āđƒāļŦ้āļĄีāļŠีāļ§ิāļ•āļ—ี่āļ”ีāļĒิ่āļ‡āļ‚ึ้āļ™āđ„āļ”้ āđ€āļžāļĢāļēāļ°āļ‰āļ°āļ™ั้āļ™āđ€āļžื่āļ­āđ„āļĄ่āđƒāļŦ้āļāļģāđ€āļ™ิāļ”āļ›ัāļāļŦāļēāļ•āļēāļĄāļĄāļē āļœู้āđ€āļĨ่āļ™āđ€āļāļĄāļ็āđ€āļĨāļĒāļˆāļģāđ€āļ›็āļ™āļ•้āļ­āļ‡āđ€āļĢีāļĒāļ™āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āđƒāļŦ้āđ€āļ‚้āļēāđƒāļ™ āđāļĨāļ°āļ็āđ€āļĨืāļ­āļāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļŠāļĨ็āļ­āļ• pussy888 āļ—ี่āđ€āļŦāļĄāļēāļ°āļŠāļĄāļัāļšāļ•āļ™āđ€āļ­āļ‡ āļ็āđ€āļĨāļĒāļˆāļ°āļŠ่āļ§āļĒāđ€āļžิ่āļĄāļˆัāļ‡āļŦāļ§āļ°āļŠāļģāļŦāļĢัāļšāļāļēāļĢāļ—āļģāđ€āļ‡ิāļ™āđ„āļ”้āļĄāļēāļāļ‚ึ้āļ™ āđāļĨ้āļ§āļ็āļ–้āļēāđ€āļิāļ”āļ„ุāļ“āļĒāļ‡āļĨัāļ‡āđ€āļĨāļ—ี่āļˆāļ°āđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์ āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚้āļēāļĄāļēāļĄāļ­āļ‡ 4 āļˆุāļ”āđ€āļ”่āļ™āļ‚āļ­āļ‡āļ”āļēāļĢāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļŠāļĨ็āļ­āļ• pussy888 āļ—ี่āļžāļ§āļāđ€āļĢāļēāđ„āļ”้āļˆัāļ”āđāļˆāļ‡āđ„āļ§้āđƒāļŦ้āļ—่āļēāļ™āļ™ี้ āļ„้āļģāļ›āļĢāļ°āļัāļ™āđ„āļ”้āđ€āļĨāļĒāļ§่āļē āļĄัāļ™āļˆāļ°āļŠ่āļ§āļĒāļ—āļģāđƒāļŦ้āļĢāļ°āļ­ุāļĢāļ•āļāļĨāļ‡āđƒāļˆāđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™āļāļĄāļ„āļēāļŠิāđ‚āļ™ āļŠāļĨ็āļ­āļ• pussy888 āđ„āļ”้āļ‡่āļēāļĒāļĄāļēāļāļĒิ่āļ‡āļāļ§่āļēāđ€āļ”ิāļĄ
    4 āļˆุāļ”āđ€āļ”่āļ™āļ—ี่āļ„ุāļ“āļˆāļģāļ•้āļ­āļ‡āļ—āļĢāļēāļšāļ่āļ­āļ™āđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888
    āļ§ัāļ™āļ™ี้āļžāļ§āļāđ€āļĢāļēāļˆāļ°āļžāļēāļ„ุāļ“āđ„āļ›āļ”ู 4 āļˆุāļ”āđ€āļ”่āļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļĨืāļ­āļāđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888 āļ‹ึ่āļ‡āļ›็āļ™āļŦāļ™ึ่āļ‡āđƒāļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļĒāļ­āļ”āļŪิāļ• āđāļĨāļ°āļ็āđ€āļ›็āļ™āļ—ี่āļŠāļ­āļšāđƒāļˆ āļ‚āļ­āļ‡āđ€āļŦāļĨ่āļēāļ™ัāļāđ€āļĨ่āļ™āđ€āļāļĄāļĄāļēāļāļĄāļēāļĒāļ่āļēāļĒāļāļ­āļ‡ āļ–้āļēāļŦāļēāļāļ•้āļ­āļ‡āļāļēāļĢāļĢูāđāļĨ้āļ§āļ§่āļēāļˆุāļ”āđ€āļ”่āļ™āļ—ี่āļ§่āļēāļ™ั้āļ™ āđ€āļ›็āļ™āļ­āļĒ่āļēāļ‡āđ„āļĢ āļ•āļēāļĄāļžāļ§āļāđ€āļĢāļēāđ„āļ›āļ”ูāļัāļ™āđ„āļ”้āđ€āļĨāļĒ
    • āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888 āđ€āļ›็āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļ—ี่āđ€āļĨ่āļ™āļ‡่āļēāļĒ āđ‚āļ”āļĒāđ€āļŦāļ•ุāļ™ี้āļ–้āļēāđ€āļิāļ”āļĨุāļāļĢāđ„āļĄ่āđ€āļ„āļĒāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļĄāļēāļ่āļ­āļ™ āļŦāļĢืāļ­āļĒัāļ‡āđ„āļĄ่āļĄีāļ„āļ§āļēāļĄāļĢู้āđ€āļี่āļĒāļ§āļัāļšāđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļĄāļēāļ่āļ­āļ™āļ็āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨ่āļ™āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888āđ„āļ”้ āđ„āļĄ่āļˆāļģāđ€āļ›็āļ™āļ—ี่āļˆāļ°āļ•้āļ­āļ‡āļĄāļēāļ§ิāļ•āļāļัāļ‡āļ§āļĨāļŦāļĢืāļ­āļāļĨุ้āļĄāđƒāļˆ
    • āļ„ุāļ“āļŠāļēāļĄāļēāļĢāļ–āđ€āļĨืāļ­āļāļˆ่āļēāļĒāđ€āļ‡ิāļ™āđ€āļิāļĄāļžัāļ™āđ„āļ”้āđ€āļ­āļ‡āļ•āļēāļĄāļ›āļĢāļēāļĢāļ–āļ™āļē āđ€āļ™ื่āļ­āļ‡āļˆāļēāļāļ§่āļēāđ€āļāļĄ āļŠāļĨ็āļ­āļ• pussy888 āđ„āļĄ่āļˆāļģāļัāļ”āđ€āļ‡ิāļ™āļŠāļģāļŦāļĢัāļšāđ€āļžื่āļ­āļāļēāļĢāļ§āļēāļ‡āđ€āļ”ิāļĄāļžัāļ™ āļ—āļģāđƒāļŦ้āļœู้āđ€āļĨ่āļ™āđ€āļāļĄāļŠāļēāļĄāļēāļĢāļ–āļˆāļģāļัāļ”āļ§āļ‡āđ€āļ‡ิāļ™āļ—ี่āđ€āļ­āļēāļĄāļēāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļ™ี้āđ„āļ”้
    • āļĄีāļ§ิāļ˜ีāļāļēāļĢāļŠāļģāļŦāļĢัāļšāļāļēāļĢāđ€āļĨ่āļ™āđ€āļāļĄ āļŠāļĨ็āļ­āļ• pussy888 āļŦāļĨāļēāļĒāđāļšāļš āļ‹ึ่āļ‡āļˆāļ°āļŠ่āļ§āļĒāđ€āļžิ่āļĄāļˆัāļ‡āļŦāļ§āļ°āļŠāļģāļŦāļĢัāļšāđƒāļ™āļāļēāļĢāļ—āļģāđ€āļ‡ิāļ™āđƒāļŦ้āļัāļšāļœู้āđ€āļĨ่āļ™āđ„āļ”้āļ­āļĒ่āļēāļ‡āļ”ีāđ€āļĒี่āļĒāļĄ āļ—āļģāđƒāļŦ้āļĄีāļ„āļ™āļ—ี่āļžāļ­āđƒāļˆāđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļŠāļĨ็āļ­āļ• pussy888āđ€āļžิ่āļĄāļ‚ึ้āļ™āđ€āļĢื่āļ­āļĒāđ†
    • āļœู้āđ€āļĨ่āļ™āđ€āļāļĄāđ„āļ”้āđ‚āļ­āļāļēāļŠāļ—āļģāđ€āļ‡ิāļ™āđ„āļ”้āļ‡่āļēāļĒ āļ”้āļ§āļĒāļĢāļ°āļšāļšāđ€āļāļĄāļ—ี่āļ›āļĢัāļšāļ›āļĢุāļ‡āļ‚ึ้āļ™ āļ—āļģāđƒāļŦ้āļœู้āđ€āļĨ่āļ™āđ€āļāļĄāļĄีāļĢāļēāļĒāđ„āļ”้ āļĢāļ§āļĄāļ—ั้āļ‡āđ„āļ”้āđ‚āļ­āļāļēāļŠāļ—ี่āļˆāļ°āļ–ูāļāđāļˆ็āļ•āļžāļ­āđ€āļžีāļĒāļ‡āļ•āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888āļĄāļēāļāļĒิ่āļ‡āļāļ§่āļēāđ€āļ”ิāļĄ
    āđ€āļžีāļĒāļ‡āđ€āļ—่āļēāļ™ี้ āļĄั่āļ™āđƒāļˆāļ§่āļēāļŦāļĨāļēāļĒāļ—่āļēāļ™āļ—ี่āļāļģāļĨัāļ‡āļ•āļāļĨāļ‡āđƒāļˆāļ§่āļēāļˆāļ°āđ€āļ‚้āļēāļĄāļēāđ€āļĨ่āļ™āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888āļ”ีāļŦāļĢืāļ­āđ€āļ›āļĨ่āļē āļ็āļšāļēāļ‡āļ„āļĢั้āļ‡āļ­āļēāļˆāļˆāļ°āļ•āļāļĨāļ‡āđƒāļˆāđāļĨ้āļ§ āļ‹ึ่āļ‡āļ–้āļēāđ€āļิāļ”āļ„ุāļ“āļ•āļāļĨāļ‡āđƒāļˆāļ—ี่āļˆāļ°āļĒāļēāļĄāđ€āļŠ้āļēāļĄāļēāļ—āļ”āļĨāļ­āļ‡āđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļ™ี้āļĄāļ­āļ‡ āļ­āļĒ่āļēāļĨืāļĄāļ—ี่āļˆāļ°āļĢāļ°āļ§ัāļ‡ āļĢāļ§āļĄāļ—ั้āļ‡āđ€āļĨืāļ­āļāđ€āļĨ่āļ™āđ€āļāļĄāļŠāļĨ็āļ­āļ• pussy888āļ­āļĒ่āļēāļ‡āļĄีāļŠāļ•ิāļŠัāļĄāļ›āļŠัāļāļāļ° āļ„ิāļ”āđƒāļŦ้āļ–ี่āļ–้āļ§āļ™āļ่āļ­āļ™āļˆāļ°āļˆ่āļēāļĒāđ€āļ‡ิāļ™āļžāļ™ัāļ™ āļŦāļĢืāļ­āđ€āļĢิ่āļĄāļžāļ™ัāļ™ āļĻึāļāļĐāļēāđ€āļĨ่āļēāđ€āļĢีāļĒāļ™āđāļ™āļ§āļ—āļēāļ‡āļāļēāļĢāđ€āļĨ่āļ™āđ€āļāļĄāđƒāļŦ้āļĢู้āđ€āļĢื่āļ­āļ‡ āđāļĨ้āļ§āļ็āđƒāļŦ้āļ™āļēāļ™ัāļ›āļāļēāļĢāđ€āļžิ่āļĄāļ‚ึ้āļ™āđ€āļĢื่āļ­āļĒāđ† āļŠāļĢุāļ›āđ€āļ›็āļ™ āļœู้āđ€āļĨ่āļ™āđ€āļāļĄāļˆึāļ‡āļ„āļ§āļĢāđ€āļĢีāļĒāļ™āļĢู้āđ€āļ•āļĢีāļĒāļĄāļ„āļ§āļēāļĄāļžāļĢ้āļ­āļĄāđ€āļĨ่āļ™āđ€āļāļĄāļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļ‚āļ­āļ‡āļ•ัāļ§āļ„ุāļ“āđ€āļ­āļ‡āđƒāļŦ้āļ”ีāđ€āļĒี่āļĒāļĄāļ—ี่āļŠุāļ” āđ€āļžื่āļ­āļ„āļ§āļēāļĄāļ›āļĢāļ°āļŠāļšāļ„āļ§āļēāļĄāļŠāļģāđ€āļĢ็āļˆāļŠāļģāļŦāļĢัāļšāđƒāļ™āļāļēāļĢāđ€āļĨ่āļ™āļ›āļ™āļ„āļēāļŠิāđ‚āļ™āļ­āļ­āļ™āđ„āļĨāļ™์āļ‚āļ­āļ—ุāļāļ„āļ™
    pussy888

    ReplyDelete

Post a Comment

Popular posts from this blog

Changing the root of a binary tree

ProjectEuler Problem 719 (some hints, but no spoilers)

Hard Leetcode Problem: Grid Illumination