30/09/2018, 22:46

Cho mình xin ý tưởng bài tìm chữ số xuất hiện ít nhất trong mảng

Các bạn cho xin mình ý tưởng bài này mình chỉ cần ý tưởng thôi không cần giải mình suy nghi hoài không ra ý tưởng:

cho mảng một chiều các số nguyên hãy viết hàm tìm chữ số xuất hiện ít nhất trong mảng

Đỗ Trung Quân viết 00:47 ngày 01/10/2018

Có nhiều cách, dễ nhất là dùng HashMap. Cho vòng lặp add từng số vào, gặp số trùng thì tăng value lên. check value cái nào bé nhất thì ra

Duc Nguyen viết 00:57 ngày 01/10/2018

bạn có thể nói cụ thể dc ko mà hashmap la gì vậy bạn

Đỗ Trung Quân viết 00:52 ngày 01/10/2018

Bạn đang học ngôn ngữ gì? Chắc bạn mới học chưa biết đến cái này. Nó là gì thì bạn google tìm sẽ dễ hiểu hơn.

Duc Nguyen viết 00:57 ngày 01/10/2018

mình đang học c++ bạn có thể cụ thể hơn bài tập này dc ko

Đỗ Trung Quân viết 00:55 ngày 01/10/2018

Nếu là C++
Cách 1: cũng có thể dùng Hashmap. Cái này bạn tự google
Cách 2: Code tay: Cần tạo 3 mảng, mảng 2 và 3 có độ dài bằng nhau nhé

  • b1: Đầu tiên cần 1 vòng lặp for add từng number vào mảng 1
  • b2: Sort cái mảng này
  • b3: Đổ dữ liệu từ mảng 1 sang mảng 2 với điều kiện
  • không trùng value. Mỗi lần đẩy số từ mảng 1 sang mảng 2 thì mảng 3 cũng phải add 1 giá trị =1
  • Nếu trùng thì mảng 3 tại vị trí đó + lên 1
  • b4: check cái mảng 3 xem vị trí nào bé nhất thì cái số tại vị trí đó ở mảng 2 xuất hiện ít lần nhất

Hình minh họa


Cách 3: Dùng để thay cho vòng lặp ở cách 2. Bạn tìm hiểu thật toán đệ quy để viết cái hàm này

  int countTimeAppear(int number, int a[], int lenght)
- number là số cần check
viết 00:59 ngày 01/10/2018

tree map cũng được, ko nhất thiết phải là hash map đâu.

map là 1 container (thùng chứa) với mục đích y hệt mảng, nhưng thay vì index phải là số nguyên như mảng, vd arr[10], thì với map index (gọi là key) là kiểu gì cũng được, tất nhiên là có kèm yêu cầu nhất định:

  • tree map: key phải so sánh được, cụ thể là chỉ cần so sánh bé hơn.
  • hash map: key phải “băm” được, tức là chuyển về số nguyên được (thông qua hàm nào đó, gọi là hàm băm).

trong C++ tree map là std::map<key_type,value_type>, hash map là std::unordered_map<key_type,value_type>. Xài cái nào cũng được.

Đỗ Trung Quân viết 01:02 ngày 01/10/2018

Mà cái cách 2 mình nghĩ chỉ cần 2 mảng thôi cũng đủ rồi. Tùy bạn code

Duc Nguyen viết 00:47 ngày 01/10/2018

cám ơn sư huynh qtd đỗ trung quân sư huynh có thể cho để xin facebok có gì để sư đệ có thể trao đổi trong học tập

kiencon viết 00:47 ngày 01/10/2018

nếu k quan tâm đến độ phức tạp của thuật toán, bạn có thể dùng quicksort từ nhỏ đến lớn hoặc ngược lại, sau đó chỉ cần dùng nhiều nhất ba biến chạy 1 vòng for là tìm ra được.

Duc Nguyen viết 00:50 ngày 01/10/2018

bạn có thể nói cụ thể dc ko mình mới nhập môn chưa hiểu bạn nói lắm

kiencon viết 00:54 ngày 01/10/2018

ý tưởng mình đơn giản lắm, bạn sắp xếp dãy số từ nhỏ tới lớn, mục đích để các số bằng nhau nằm kế nhau, sau đó dùng vòng lặp duyệt các số trong mảng, 1 biến mang giá trị số đc lặp lại trước đó, 1 biến mang giá trị số lần lặp của giá trị đc lặp trước đó, 1 biến mang giá trị số lần lặp của giá trị đang lặp, sau đó dùng vài điều kiện if để đưa ra số có lần lặp ít nhất. bạn lấy giấy viết ra sẽ dễ hiểu hơn.

Nguyễn Hoàng Trung viết 00:59 ngày 01/10/2018

em nghĩ chỉ cần 2 mảng thôi, mảng 1 là mảng input, tạo một biến đếm, cho chạy 2 vòng lặp trên mảng 1, khi nào có hai giá trị giống nhau thì biến đếm tăng,sau cùng thì lưu giá trị vào mảng 2 rồi reset biến đếm xong tiếp tục. Cách này hơi rườm rà với lại có cái khó là số trùng nhau thì sẽ sai, nên với số nào mình đã tìm rồi thì cho giá trị nó trong mảng 1 là 1 số nào đó để tránh trùng, có thể cho bằng số đã tìm rồi :v :v :v :v

Đỗ Trung Quân viết 00:55 ngày 01/10/2018

Tại bạn ý bảo mới học C++ nên anh chỉ cách cơ bản nhất ( chắc là đang học loop). Cách của em cũng được. Và cách đó cũng gần giống như cách 3 của anh. Viết 1 cái hàm đếm số lần xuất hiện của từng số trong mảng. Đặt lần đầu tiên là min rồi so sánh với các lần sau.

Nguyễn Hoàng Trung viết 00:54 ngày 01/10/2018

à sẵn em cũng cảm ơn anh, nhờ coi post mới biết cái hashmap :v

Bài liên quan
0