求助:求解待办任务数组中完成全部顶级优先级任务的最少任务数
问题描述
Aman制定了一份待办任务清单,包含所有待完成任务,清单按任务耗时递增排序,Aman从清单起始处开始执行任务。给定一个大小为N的数组表示该任务清单,每个任务编号为1到N之间的整数,其中编号1到7的任务为顶级优先级任务。需确定Aman完成所有顶级优先级任务所需完成的最少任务数。
示例
示例1
输入数组:
1 5 2 4 9 3 6 7 8
输出:
8
解释:第8个任务是最后一个顶级优先级任务(编号7),执行到此处时所有1-7号任务都已完成。
示例2
输入数组:
10 9 8 7 6 5 4 3 2 1
输出:
10
解释:最后一个任务(编号1)是顶级优先级任务,且是所有1-7号任务中最后出现的,因此必须执行全部10个任务才能完成所有顶级任务。
现有代码及困惑
目前仅能写出统计所有1-7号任务数量的代码,代码如下:
#include <iostream> using namespace std; int main() { int n, count = 0; cin >> n; int arr[n]; for (int i = 0; i < n; i++) { cin >> arr[i]; } for (int i = 0; i < n; i++) { if (arr[i] <= 7) { count++; } } cout << count << endl; return 0; }
理解问题逻辑,但无法转化为正确代码:需要统计的是完成所有1-7号任务前必须执行的最少任务数——即必须执行到最后一个顶级优先级任务出现的位置,前面的任务都要完成。比如第二个示例中需执行到最后一个任务才能完成所有顶级优先级任务,第一个示例执行到第8个任务时已完成全部顶级优先级任务。
解决方案
核心逻辑:要完成所有顶级任务,必须执行到最后一个顶级任务在数组中的位置(因为任务按顺序执行,前面的任务都得做)。所以只需要找到所有1-7号任务中最后出现的那个的索引,再加1就是答案(因为任务从第1个开始计数)。
修改后的代码:
#include <iostream> using namespace std; int main() { int n; cin >> n; int arr[n]; int last_top_task_index = 0; for (int i = 0; i < n; i++) { cin >> arr[i]; // 只要是顶级任务,就更新最后出现的索引 if (arr[i] >= 1 && arr[i] <= 7) { last_top_task_index = i; } } // 索引转任务序号:索引+1 cout << last_top_task_index + 1 << endl; return 0; }
代码验证
- 针对第一个示例,最后一个顶级任务是索引7的任务7,7+1=8,与输出一致。
- 针对第二个示例,最后一个顶级任务是索引9的任务1,9+1=10,与输出一致。
内容的提问来源于stack exchange,提问作者Srajan
相关产品推荐
相关产品推荐

