- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
Điều này đã được hỏi trong cuộc phỏng vấn và được sử dụng để tính toán số phiên tối đa có thể được tổ chức dựa trên 2 mảng đã cho.
Kích thước của mảng là từ 1 đến 50 và giá trị tối đa trong mảng là từ 1 đến 1000.
Tôi có một mảng biểu thị thời gian bắt đầu phiên - [1,3,3,5,7]. Một mảng khác biểu thị thời gian dành cho phiên trên - [2,2,1,2,1]
Theo dữ liệu trên, buổi đầu tiên bắt đầu lúc 1 giờ và kéo dài trong 2 giờ. Vì thời lượng phiên là 2 giờ nên nó kéo dài từ 1 giờ đến 3 giờ. Buổi thứ hai và thứ ba bắt đầu lúc 3 giờ và kéo dài 2 giờ hoặc 1 giờ. Vì vậy, họ đã thảo luận từ 3 đến 5 vấn đề trong phiên thứ 2 và 3 đến 4 vấn đề trong phiên thứ 3. Buổi thứ tư bắt đầu lúc 5 giờ và kéo dài trong 2 giờ. Vì vậy, nó bao gồm từ 5 đến 7 vì thời lượng là 2 giờ và buổi cuối cùng bắt đầu lúc 7 giờ và kéo dài trong 1 giờ.
Việc thứ hai và thứ ba diễn ra cùng lúc nên chúng ta chỉ cần chọn một để có thể sắp xếp được nhiều buổi học nhất.
Đối với dữ liệu mẫu được đưa ra ở trên, chúng ta có thể lên lịch 4 phiên.
Một ví dụ khác:
thời gian bắt đầu phiên - [1,3,5]. Thời gian họp - [2,2,2].
Tất cả các buổi ở đây không thể xung đột nên chúng ta có thể lên lịch tối đa 3 buổi.
Đây là mã tôi nghĩ ra:
public static int getMaximumMeetings(List start, List timeTaken) {
// Bản đồ với khóa là thời gian bắt đầu cuộc họp và giá trị là danh sách các giá trị thời gian đã thực hiện.
Bản đồ> bản đồ = new LinkedHashMap<>();
for (int i = 0; i < start.size(); i++) {
List list = map.get(start.get(i));
nếu (danh sách == null) {
list = new ArrayList<>();
}
list.add(timeTaken.get(i));
map.put(start.get(i), danh sách);
}
System.out.println(map);
// Nhận từng cuộc họp một
Đặt phím = map.keySet();
Iterator it = key.iterator();
Thời gian nguyên = it.next();
List list = map.get(time);
// Sắp xếp các giá trị thời gian thực hiện để chúng ta có thể chọn cuộc họp có thời lượng ít nhất
list.sort(null);
số int = 1;
while (it.hasNext()) {
Danh sách prevList = list;
giá trị int = prevList.get(0);
int prevTime = thời gian;
thời gian = it.next();
danh sách = map.get(thời gian);
list.sort(null);
// Kiểm tra xem tổng thời gian dành cho cuộc họp này có nhỏ hơn thời gian bắt đầu cuộc họp tiếp theo hay không.
if (giá trị + prevTime <= thời gian) {
count++;
} khác {
thời gian = prevTime;
danh sách = prevList;
}
}
số lần trả lại;
}
Chương trình này chỉ xóa được 5 trong số 12 trường hợp thử nghiệm và không thành công tất cả các trường hợp còn lại. Tất cả các trường hợp thử nghiệm đều bị ẩn. Vì vậy, tôi không chắc có gì sai với mã này.
Tôi là một lập trình viên xuất sắc, rất giỏi!