Hướng dẫn equalize the array hackerrank solution in javascript - cân bằng giải pháp mảng hackerrank trong javascript

Là một sinh viên tốt nghiệp mã hóa gần đây, tôi nhanh chóng nhận ra rằng tôi cần phải thoải mái hơn với các cấu trúc dữ liệu và thuật toán nếu tôi muốn trao đổi dịch vụ của mình với tư cách là một kỹ sư để kiếm tiền. Vì vậy, tôi bắt đầu luyện tập. Hàng ngày (gần như- hãy để có thể là playoffs thực tế!). Và thực hành nhiều hơn. Bài đăng trên blog này các tính năng và giải thích giải pháp của tôi cho Hackerrank, cân bằng vấn đề mảng.

Vấn đề nói rằng chúng ta sẽ nhận được một mảng làm đầu vào (ví dụ: [3,3,2,1,3]) và chúng ta cần tìm ra mức độ xóa thấp nhất mà chúng ta cần thực hiện để tất cả các yếu tố giống nhau. Trong trường hợp này, đó sẽ là 2, vì việc xóa 2 và 1 trong mảng này sẽ khiến chúng ta có [3, 3, 3] - tất cả đều bằng nhau. Làm thế nào để chúng ta làm điều này với mã?

SPOILER ALERT - Giải pháp dưới đây!

function equalizeArray(arr) {
let arrObj = {};
let maxCount = 0;
for (let num of arr) {
arrObj[num] = arrObj[num] + 1 || 1;
}
for (let value in arrObj) {
if (arrObj[value] > maxCount) {
maxCount = arrObj[value];
}
}
return (arr.length - maxCount);}

Gần đây tôi đã học được một cách tuyệt vời để giải mã các vấn đề thuật toán:

  1. Vẽ nó ra; và làm nó theo cách thủ công như một con người
  2. Thực hiện các bước đó và viết nó ra, hoặc giả mã nó thành các bước
  3. Sau đó bắt đầu dịch nó thành mã.

Hãy để tiếp cận với cách tiếp cận này với vấn đề này.

Bằng cách nhìn vào mảng [3,3,2,1,3] như một con người, tôi có thể thấy ngay một số số được lặp lại. Vì vậy, sẽ có ý nghĩa để loại bỏ các số khác với số lặp đi lặp lại, để làm cho tất cả giống nhau. Vì vậy, hãy để cho phép máy tính theo dõi số lần mỗi số hiển thị trong mảng. Đó là những gì mã này làm:

let arrObj = {};
for (let num of arr) {
arrObj[num] = arrObj[num] + 1 || 1;
}

Trước tiên chúng tôi khởi tạo một bản đồ băm trống. Sau đó, đối với mỗi số hiển thị trong mảng, chúng tôi đặt một khóa trong bản đồ băm đó và tăng 1 (nếu mã đã thấy số đó trước đó) hoặc đặt nó thành một (nếu mã chưa bao giờ thấy số đó trước).

Ở cuối phần đó, chúng tôi có một đối tượng trông như thế này:

arrObj = {
1:1,
2:1,
3:3
}

Tiếp theo, tôi cần loại bỏ các số hiển thị ít nhất. làm sao chúng ta làm việc đó bây giờ? Chúng ta cần cho biết mã số nào trong mảng gốc hiển thị nhiều nhất. Nói cách khác, khóa nào trong đối tượng bản đồ băm của chúng tôi có giá trị lớn nhất. Đó là những gì mã này làm:key in our hash map object has the largest value. That’s what this piece of code does:

let maxCount = 0;
for (let value in arrObj) {
if (arrObj[value] > maxCount) {
maxCount = arrObj[value];
}
}

Điều này lặp lại thông qua bản đồ băm Arrobj mà chúng tôi đã tạo và xem xét từng giá trị. Nếu giá trị đó lớn hơn giá trị của MaxCount, lúc đầu là 0, thì nó sẽ đặt MaxCount thành số đó. Vì số đầu tiên mà nó thấy là 1 và 1 lớn hơn 0, tối đa hiện được đặt thành 1. Sau đó, nó nhìn vào 2. Vì 1 không lớn hơn 1, nên nó bỏ qua nó. Trên lần lặp cuối cùng, nó nhìn vào 3. 3 chắc chắn lớn hơn một, vì vậy ở cuối Maxcount được đặt thành 3.

Bây giờ, tất cả những gì chúng ta phải làm là trừ MaxCount, số lần số lần thường xuyên nhất xuất hiện, từ tổng số phần tử mà mảng có, vì đây sẽ là số lượng xóa tối thiểu cần thiết để làm cho tất cả các số giống nhau. Và tất nhiên, don không quên trả lại số. Đó là những gì mã này làm

________ 4 đó là tất cả những gì cô ấy đã viết

Cảm ơn vì đã đọc!

Và hãy nhớ: grit> tài năng.

Karl có một loạt các số nguyên. Anh ta muốn giảm mảng cho đến khi tất cả các yếu tố còn lại đều bằng nhau. Xác định số lượng tối thiểu các yếu tố để xóa để đạt được mục tiêu của mình.

Ví dụ: nếu mảng của anh ta là ARR = [1,2,2,3], chúng ta sẽ thấy rằng anh ta có thể xóa 2 phần tử 1 và 3 rời khỏi ARR = [2,2]. Anh ta cũng có thể xóa cả hai twos và 1 hoặc 3, nhưng điều đó sẽ mất 3 lần xóa. Số lượng xóa tối thiểu là 2.arr = [1,2,2,3], we see that he can delete the 2 elements 1 and 3 leaving arr = [2,2]. He could also delete both twos and either the 1 or the 3, but that would take 3 deletions. The minimum number of deletions is 2.

Mô tả chức năng

Hoàn thành hàm EqualizeArray trong trình soạn thảo bên dưới. Nó phải trả về một số nguyên biểu thị số lượng xóa tối thiểu cần thiết.

CquilizeArray có (các) tham số sau:

  • mảng: một mảng số nguyên

Định dạng đầu vào

Dòng đầu tiên chứa một số nguyên n, số lượng phần tử trong ARR.n, the number of elements in arr.

Dòng tiếp theo chứa N số nguyên được phân tách không gian ARR [i].n space-separated integers arr[i].

Hạn chế

  • 1
  • 1

Định dạng đầu ra

In một số nguyên duy nhất biểu thị số lượng phần tử tối thiểu karl phải xóa cho tất cả các phần tử trong mảng bằng nhau.

Đầu vào mẫu

1
2
5
3 3 2 1 3

Đầu ra mẫu

1
________số 8

Giải trình

Mảng mảng = [3,3,2,1,3]. Nếu chúng ta xóa ARR [2] = 2 và ARR [3] = 1, tất cả các phần tử trong mảng kết quả, a` = [3,3,3], sẽ bằng nhau. Xóa 2 yếu tố này là tối thiểu. Các tùy chọn duy nhất khác của chúng tôi là xóa 4 yếu tố để có được một mảng [1] hoặc [2].arr = [3,3,2,1,3]. If we delete arr[2] = 2 and arr[3] = 1, all of the elements in the resulting array, A` = [3,3,3], will be equal. Deleting these 2 elements is minimal. Our only other options would be to delete 4 elements to get an array of either [1] or [2].


Dung dịch

1
2
3
4
5
6
7
8
9
10
11
12
13
let arrObj = {};
for (let num of arr) {
arrObj[num] = arrObj[num] + 1 || 1;
}
0