Amazon 面试经验分享:处理区间问题与最小化教室需求 | 面试代面, OA代做, 面试辅导
Amazon 面试经验分享:处理区间问题与最小化教室需求 | 面试代面, OA代做, 面试辅导
在这次Amazon的面试中,主要考察了考生对于区间处理和最小化资源需求的算法能力。面试题目涉及到如何判断课程之间是否存在冲突以及如何计算最小需要的教室数量。考生需要在有限时间内给出高效且正确的解决方案。这类问题不仅要求考生具备扎实的算法基础,还需要有很好的逻辑思维和代码实现能力。
如果你希望在类似的面试中表现出色,我们提供的代面服务可以帮助你快速提高面试技能,从容应对各种挑战,成功拿到心仪的offer。
想要了解更多或获取我们的服务,欢迎添加微信 leetcode-king。
题目一:判断课程是否有冲突(区间处理,排序)
Problem Description:
Given a list of courses, each with a start and end time, determine if a student can attend all the courses without any overlap.
Example:
- Input: [(10,12), (0,2), (2,11)] -> False
- Input: [(0,2), (2,9), (10,12)] -> True
Code:
import java.util.*;
class Course implements Comparable<Course> {
int start;
int end;
@Override
public int compareTo(Course other) {
return Integer.compare(this.start, other.start);
}
}
public class CourseSchedule {
void validateCourse(List<Course> courses) throws Exception {
for (Course course : courses) {
if (course.getEnd() <= course.getStart()) {
throw new Exception("Invalid input");
}
}
}
boolean canAttendAll(List<Course> courses) throws Exception {
if (courses == null) {
return true;
}
validateCourse(courses);
Collections.sort(courses);
for (int i = 0; i < courses.size() - 1; i++) {
if (courses.get(i).getEnd() > courses.get(i + 1).getStart()) {
return false;
}
}
return true;
}
题目二:计算最小教室需求(区间处理,最小化资源)
Problem Description:
Given a set of classes with start and end times, determine the minimum number of classrooms required to accommodate all the classes without any overlaps.
Assumptions:
- Inputs have already been validated (start < end, etc.).
- We always have enough classrooms.
- All classes are the same size (don’t have to account for student body size).
Code:
import java.util.*;
public class ClassroomScheduler {
int minClassRooms(List<Course> courses) {
if (courses == null) return 0;
Map<Integer, Integer> delta = new TreeMap<>();
for (Course course : courses) {
int start = course.getStart();
int end = course.getEnd();
delta.put(start, delta.getOrDefault(start, 0) + 1);
delta.put(end, delta.getOrDefault(end, 0) - 1); // O(logn)
}
int maxCourses = 0;
int curCourses = 0;
for (Map.Entry<Integer, Integer> entry : delta.entrySet()) {
curCourses += entry.getValue();
maxCourses = Math.max(maxCourses, curCourses);
}
return maxCourses;
}