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.
Bài liên quan
Đầ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ử đó
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.
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
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.
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.
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)
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
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
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 )
Đâ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
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