[Series] Mỗi tuần một bài toán Hackerrank (số thứ 4)

Bài toán: Missing Numbers
Mức độ : Easy

Shinji of the Shining Spectacles : Bossfight

Đây là tôi khi vừa giải được một bài toán super -Easy, Basic và nghĩ mình đã trở thành 1 lập trình viên pro, 1 hacker hack cả thế giới.
Hình ảnh chỉ mang tính chất tấu hài (for fun)

Quay lại chủ đề chính bài post này. Như tên bài toán đã nói ra mục đích problem cho mình tìm những số bị thiếu.
Làm Hackerrank được một thời gian tôi rút ra được một bài học thú vị ở easy level đọc đề mất gấp đôi thời gian nghĩ và code solution :D, một số trường hợp đọc đề xong tôi vẫn không hiểu tác giả đang nói cái quái gì ( The author is speaking the language of Gods )

What are the languages PM Modi speaks? - Quora

Sau khi đọc đề hẳn bạn cũng đã hiểu những ràng buộc bài toán. Vì thế giờ tôi sẽ tập trung phân tích cách thức giải bài toán này. Ta sẽ có 2 array: 1 array bị thiếu và 1 array gốc đầy đủ. Nhiệm vụ của ta rất đơn giản chỉ là cần tìm số bị thiếu cho vào 1 mảng ans[] là xong.
Một bài toán easy level giải trí cuối tuần sau những giờ vui chơi căng thẳng.
Code tham khảo : lần này tôi sử dụng Java để code:

static int[] missingNumbers(int[] arr, int[] brr) {
        int countA[] = new int[10000];
        int countB[] = new int[10000];
        Arrays.sort(arr);
        Arrays.sort(brr);
        int min = brr[0];
        int max = brr[brr.length -1];
        for(int i=0;i<arr.length;i++){
            countA[arr[i]]++;
        }
        for(int i=0;i<brr.length;i++){
            countB[brr[i]]++;
        }
        ArrayList<Integer> ansList = new ArrayList<>();
        for(int i=min;i<=max;i++){
            if(countA[i]<countB[i])
                ansList.add(i);
        }
        int[] ans = ansList.stream().mapToInt(i -> i).toArray();
        return ans;
    }

Nếu bạn muốn nhìn code dễ dàng hơn có hightlight thì bạn có thể qua link pastebin của tôi : https://pastebin.com/pqEfju8E

Giải thích về code của tôi : tôi sẽ đếm số lần xuất hiện của từng số trong 2 mảng rồi so sánh mảng đầy đủ với mảng thiểu rồi add phần tử bị thiếu vào mảng ans
Về cách chuyển arrayList về array tôi tham khảo qua : https://stackoverflow.com/questions/718554/how-to-convert-an-arraylist-containing-integers-to-primitive-int-array

Series Hackerrank các bài trước :

Số thứ nhất : https://blog.codegym.vn/2020/06/22/series-moi-tuan-mot-bai-toan-hackerrank-so-thu-1/
Số thứ hai: https://blog.codegym.vn/2020/07/02/series-moi-tuan-mot-bai-toan-hackerrank-so-thu-2/
Số thứ ba : https://blog.codegym.vn/2020/07/06/series-moi-tuan-mot-bai-toan-hackerrank-so-thu-3/

Conal Dev (Vũ Đức Minh)

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar

Facebook