Tôi tự hỏi bạn sẽ viết một phương thức java đơn giản như thế nào để tìm số nguyên trong tủ quần áo cho một giá trị đã cho trong danh sách Số nguyên được sắp xếp.Tìm giá trị gần nhất trong danh sách đơn đặt hàng
Đây là nỗ lực đầu tiên của tôi:
public class Closest {
private static List<Integer> integers = new ArrayList<Integer>();
static {
for (int i = 0; i <= 10; i++) {
integers.add(Integer.valueOf(i * 10));
}
}
public static void main(String[] args) {
Integer closest = null;
Integer arg = Integer.valueOf(args[0]);
int index = Collections.binarySearch(
integers, arg);
if (index < 0) /*arg doesn't exist in integers*/ {
index = -index - 1;
if (index == integers.size()) {
closest = integers.get(index - 1);
} else if (index == 0) {
closest = integers.get(0);
} else {
int previousDate = integers.get(index - 1);
int nextDate = integers.get(index);
if (arg - previousDate < nextDate - arg) {
closest = previousDate;
} else {
closest = nextDate;
}
}
} else /*arg exists in integers*/ {
closest = integers.get(index);
}
System.out.println("The closest Integer to " + arg + " in " + integers
+ " is " + closest);
}
}
Bạn nghĩ gì về giải pháp này? Tôi chắc chắn có một cách sạch hơn để thực hiện công việc này ...
Có lẽ phương pháp này tồn tại ở đâu đó trong thư viện Java và tôi đã bỏ lỡ nó?
Manu
Tôi nghĩ rằng mã này là tao nhã, nhưng không phải là khá nhanh như mã gốc, bởi vì bạn phải tạo ra một Danh sách mới cho mỗi cuộc gọi phương thức. – Galghamon
cố định cảm ơn :-) – dfa
Một lợi thế lớn của thuật toán này là nó không yêu cầu 'List' để được sắp xếp (vì nó sẽ phải là nếu 'Collections.binarySearch (..)' được sử dụng). –