周末有n门选修课, 小猴要在n门选修课中选择尽可能多的课程 已知每门课程的开始时间和结束时间, 不能选时间段上有重复的课程.输入格式:第一行是一个整数n(1≤n≤1000) 接下来n行,每行是2个整数a_i,b_i(0≤a_i <b_i≤10的9次方),表示每门课程开始、结束的时间。输出小猴能选的最大课程数量
时间: 2024-02-12 22:05:43 浏览: 24
这是一道经典的贪心算法题目,我们可以按照每门课程的结束时间从小到大排序,然后依次选择结束时间最早且与前面选择的课程不冲突的课程,直到不能再选择为止。
具体实现可以按照以下步骤:
1. 将所有课程按照结束时间从小到大排序。
2. 初始化当前时间为0,选择的课程数量为0。
3. 遍历每门课程,如果该课程的开始时间大于等于当前时间,则选择该课程,更新当前时间为该课程的结束时间,选择的课程数量加1。
4. 最终输出选择的课程数量即可。
以下是 Python 实现代码:
```python
n = int(input())
courses = []
for i in range(n):
start, end = map(int, input().split())
courses.append((start, end))
courses.sort(key=lambda x: x[1]) # 按照结束时间从小到大排序
current_time, count = 0, 0
for course in courses:
if course[0] >= current_time:
count += 1
current_time = course[1]
print(count)
```
时间复杂度为 O(nlogn),其中 n 为课程数量。
相关问题
使用select语句查询选修课程超过2 门课的学生学号和姓名
可以使用如下的SELECT语句来查询选修课程超过2门课的学生学号和姓名:
```
SELECT student.st_id, student.st_name
FROM student
INNER JOIN select_course ON student.st_id = select_course.sc_id
GROUP BY student.st_id, student.st_name
HAVING COUNT(*) > 2;
```
这条SELECT语句使用了INNER JOIN连接student表和select_course表,以获取学生选课的信息。然后使用GROUP BY子句按学生的学号和姓名分组,并使用HAVING子句筛选出选修课程超过2门的学生。最后,SELECT子句返回学生的学号和姓名。
需要注意的是,为了正确地统计每个学生选修的课程数量,必须使用GROUP BY子句对学生的学号和姓名进行分组。同时,由于只需要返回学生的学号和姓名,因此可以省略掉SELECT语句中的其他列。
mysql中查询没有选修某两门课的_某学校教师、学生、课程及成绩MySQL分析
可以通过以下SQL语句查询没有选修某两门课的学生:
```
SELECT student_id, student_name
FROM student
WHERE student_id NOT IN (
SELECT student_id
FROM score
WHERE course_name IN ('课程名1', '课程名2')
)
```
其中,`student` 表为学生表,包含学生的ID和姓名;`score` 表为成绩表,包含学生ID、课程名和成绩。通过子查询,筛选出选修了指定课程的学生,然后在学生表中使用 `NOT IN` 进行排除即可。
如果要查询没有选修某两门课的教师,可以类似地使用以下SQL语句:
```
SELECT teacher_id, teacher_name
FROM teacher
WHERE teacher_id NOT IN (
SELECT teacher_id
FROM course
WHERE course_name IN ('课程名1', '课程名2')
)
```
其中,`teacher` 表为教师表,包含教师的ID和姓名;`course` 表为课程表,包含课程名和授课教师ID。同样地,通过子查询筛选出授课了指定课程的教师,然后在教师表中使用 `NOT IN` 进行排除即可。
如果要查询没有选修某两门课的课程,可以使用以下SQL语句:
```
SELECT course_id, course_name
FROM course
WHERE course_id NOT IN (
SELECT course_id
FROM score
WHERE course_name IN ('课程名1', '课程名2')
)
```
其中,`course` 表为课程表,包含课程的ID和名称。同样地,通过子查询筛选出有学生选修了指定课程的课程,然后在课程表中使用 `NOT IN` 进行排除即可。