01/10/2018, 00:49

Thắc mắc về mảng một chiều

Mọi người cho em hỏi làm thế nào lấy hết được các vị trí có cùng giá trị lớn nhất hay nhỏ nhất trong mảng một chiều.VD: Cho mảng 5 phần tử: A[5]={1;2;3;4;4}. Làm thế nào để lấy được hết các vị trí có giá trị lớn nhất. Em mới học mảng một chiều và mới học thuật toán lính canh nên chưa rõ lắm phần này.

Từ Gia Lộc viết 03:00 ngày 01/10/2018

Đầu tiên Bạn duyệt mảng để tìm ra phần tử có giá trị lớn nhất
Xong
Bạn duyệt mảng thêm lần nữa và so sánh xem phần tử nào trùng với giá trị lớn nhất thì Bạn xuất ra vị trí của phần tử đó

tik tok viết 03:01 ngày 01/10/2018

có cách nào chỉ cần duyệt mảng một lần không? hay chỉ có duy nhất cách đó thôi.

Người bí ẩn viết 03:03 ngày 01/10/2018

Theo mình, nếu là mảng thì chỉ có duy nhất cách đó.
Còn muốn 1 lần duyệt thì dùng container vector. Tham khảo tại đây

Từ Gia Lộc viết 02:56 ngày 01/10/2018

Cách dĩ nhiên có nhưng nó chỉ khiến bài toán phức tạp hơn chỉ để đổi lấy 1 lần duyệt mảng ban đầu , không đáng để đánh đổi.

tik tok viết 03:01 ngày 01/10/2018

có lẽ là không phức tạp lắm đâu mà là do kiến thức chưa đủ với tới thôi anh à, giống như cách dùng container vector mà @tcm đưa ra làm em ngồi cả tối mà chẳng hiểu được bao nhiêu.

Tynk Huynk viết 02:52 ngày 01/10/2018

Mới học hiểu được bao nhiêu mà đòi tối ưu giải thuật 1 lần duyệt. Cứ thực hiện như cách @loclakecodon để biết cách làm đơn giản nhất, nếu lĩnh hội được thì bạn cứ tự nhiên mà tối ưu hóa giải thuật. Chẵng có ai lên núi mà không bắt đầu từ chân núi cả (trừ đi bằng trực thăng ra)

Saber Yii viết 02:57 ngày 01/10/2018

Mình có 1 cách 1 vòng for
Mô tả như sau: input(a : array)
Bạn sẽ có 1 biến max và 1 mảng chứa vị trí (viTriArr) của các max tìm được

  • Mặc định bạn set max = giá trị đầu tiên trong mảng

  • Chạy vòng for với i là index
    Mỗi vòng: kiểm tra max với a[i]
    TH1: max = a[i]: thêm vi trí i vào viTriArr
    TH2: max > a[i]: bỏ qua, duyệt tiếp
    TH3: max < a[i]: thực hiện
    * max = a[i]
    * reset viTriArr
    * lưu lại vị trí i trong viTriArr

P/S: 1for bù lại bạn phải thêm nhiều điều kiện

Nguyễn Văn Vương viết 02:57 ngày 01/10/2018

https://drive.google.com/open?id=0B_p7PlV-es4-Vk5BeWNQcU1aS3M
trên đây là code của mình theo cách của bạn Tử Gia Lộc,bạn có thể tham khảo qua

tik tok viết 03:05 ngày 01/10/2018

Cảm ơn bạn nhiều, bạn có thể sử dụng mã giả hay viết code luôn ra cho mọi người dễ nhìn(đỡ công download source )

Từ Gia Lộc viết 02:52 ngày 01/10/2018

Đây cũng là ý tưởng của Mình ^^
Nhưng Bạn kia hỏi bài cơ bản chỉ duyệt mảng sơ sơ mà chưa xong thì Mình cũng không dám gợi ý cách xử lý nặng hơn thế này. Đúng về mảng bự nó duyệt một vòng, nhưng bên trọng vòng đó nó phải duyệt nhiều cái khác. Nó không đáng phải đánh đổi và nó khá phi logic

Nguyễn Văn Vương viết 03:02 ngày 01/10/2018

bạn có thể cho mình biết cách nào khác được không
chân thành cảm ơn bạn

Bài liên quan
0