Tôi có một danh sách các dãy chứa đầy các số nguyên. Tôi chỉ cần một cách để có được ba số nguyên hàng đầu trong danh sách.Lấy 3 giá trị cao nhất trong danh sách mảng?
Trả lời
Bạn cần phải viết so sánh của riêng mình và sử dụng Collections.sort(list, comparator)
trên ArrayList
, sẽ mang 3 số nguyên hàng đầu lên trên cùng (điều này hoàn toàn dựa trên logic trong trình so sánh của bạn).
Sau đó, làm subList? – kosa
Vâng, đó là vào OP. Ngay cả khi anh ta làm một danh sách phụ, anh ta vẫn sẽ phải đi qua danh sách để lấy chúng. Thay vào đó, anh ta có thể duyệt qua danh sách được sắp xếp, cho đến vị trí thứ 3 và nhận được các giá trị! IMHO, chúng ta nên để lại phần đó cho OP! – SudoRahul
Nhìn vào các câu hỏi và các thẻ, tôi cảm thấy điều này là nhiều hơn về phân loại danh sách, hơn bất cứ điều gì khác! – SudoRahul
sử dụng Collections.sort để sắp xếp và lấy ba giá trị đầu tiên
Đặt tất cả các yếu tố vào một TreeSet
sử dụng TreeSet(Collection c)
constructor sau đó sử dụng TreeSet.descendingIterator
để có được 3 yếu tố đầu tiên. Một danh sách có thể chứa các bản sao, bằng cách sử dụng TreeSet đảm bảo rằng bạn lấy 3 giá trị lớn nhất khác biệt.
List<Integer> list;
Collections.sort(list);
List<Integer> top3 = new ArrayList<Integer>(list.subList(list.size() -3, list.size()));
tôi có thể chỉ đơn giản là sử dụng các sublist, nhưng danh sách trở về từ sublist() là một xem thuộc danh mục cơ sở, vì vậy thay đổi được thực thì sẽ được phản ánh trong TOP3.
Make sử dụng List#subList(int fromIndex,int toIndex)
Trả một cái nhìn của phần danh sách này giữa fromIndex quy định, toàn diện và toIndex, độc quyền.
yourList.subList(yourList.size() -n, yourList.size());
Theo tài liệu sublist
Nó phụ thuộc vào kích thước của danh sách và những gì hiệu suất mà bạn muốn. Nếu danh sách là "nhỏ" thì bất kỳ giải pháp nào trước đó sẽ đủ, tùy thuộc vào yêu cầu của bạn.
Nếu danh sách là "lớn" và hiệu suất là quan trọng, thì bạn nên lặp qua danh sách và giữ 3 lớn nhất khi bạn đi.
Một sự đánh đổi khác là thời gian và lỗi của bạn so với sử dụng thư viện. Một trong các cách tiếp cận thư viện được đề cập sẽ hoạt động ít hơn thời gian lập trình của bạn so với giải pháp được mã hóa tùy chỉnh
Từ các câu trả lời nhận được, rõ ràng là có hai cách giải thích câu hỏi của bạn. Bạn có muốn 3 mục đầu tiên hoặc 3 mục lớn nhất không? – andy256