华为笔试题,会议安排问题

6.24 的笔试题,最近又想起来了,但是没有头绪。各位大佬们呢有什么思路吗?
题目描述:
给定一间会议室,和一天的会议申请表。会议室的开放时间为8点到23点,会议申请表中有待安排的每场会议的开始时间和结束时间,求怎么安排会议,使会议室在一天中的利用时间最长(同一个时间段内只能有1个或者0个会议)。
会议申请表如:
[[8,10]
[9,11]
[12,16]]
表示待安排的会议8点开始,10点结束;9点开始,11点结束;12点开始,16点结束。
#笔试题目#
全部评论
思路大概是从最晚结束的开始安排,我记得是动态规划还是贪心,是可以做出来的。(只有思路不会写代码233333
点赞 回复 分享
发布于 2020-09-14 18:47
import java.util.Arrays; import java.util.Comparator; public class Code_06_BestArrange { public static class Program { public int start; public int end; public Program(int start, int end) { this.start = start; this.end = end; } } public static class ProgramComparator implements Comparator<Program> { @Override public int compare(Program o1, Program o2) { return o1.end - o2.end; } } public static int bestArrange(Program[] programs, int start) { Arrays.sort(programs, new ProgramComparator()); int result = 0; for (int i = 0; i < programs.length; i++) { if (start <= programs[i].start) { result++; start = programs[i].end; } } return result; } public static void main(String[] args) { } }
点赞 回复 分享
发布于 2020-09-14 19:13
用递归试了下 from typing import List def solve(l: List[List[int]]):     n = len(l)     def dfs(i):         if i >= n - 1:             return 1         curr_start, curr_end = l[i]         ans = -1         for j in range(i + 1, n):             next_start, next_end = l[j]             if next_start >= curr_end:                 ans = max(ans, dfs(j) + 1)         return ans     return dfs(0)
点赞 回复 分享
发布于 2020-09-14 21:29
leetcode搜区间合并
点赞 回复 分享
发布于 2020-09-14 23:20
贪心算法 区间调度问题
点赞 回复 分享
发布于 2020-09-15 10:39
回溯法
点赞 回复 分享
发布于 2022-08-13 20:51

相关推荐

已老实求offer😫:有点像徐坤(没有冒犯的意思哈)
点赞 评论 收藏
分享
点赞 6 评论
分享
牛客网
牛客企业服务