C++ 我们能降低最大赢家问题的时间复杂度吗?
两个队(A队和B队)正在相互竞争。每个队都有相同数量的队员。两个团队中的每个团队成员都有一些与他们相关的权力。只有当一个玩家的力量严格大于对手的力量时,他才能获胜。A队的一名球员与B队的一名球员配对,按照两队球员的排列方式进行。我们可以按照我们想要的方式安排两队的球员。以这样一种方式安排团队:团队a的赢家多于输家 输入格式:C++ 我们能降低最大赢家问题的时间复杂度吗?,c++,arrays,algorithm,C++,Arrays,Algorithm,两个队(A队和B队)正在相互竞争。每个队都有相同数量的队员。两个团队中的每个团队成员都有一些与他们相关的权力。只有当一个玩家的力量严格大于对手的力量时,他才能获胜。A队的一名球员与B队的一名球员配对,按照两队球员的排列方式进行。我们可以按照我们想要的方式安排两队的球员。以这样一种方式安排团队:团队a的赢家多于输家 输入格式: 第一行输入由测试用例的数量T组成 每个测试用例的第一行由每个团队可以拥有的成员数量N组成 每个测试用例的第二行由N个空格分隔的整数组成,这些整数表示团队A成员的能力 每个测
第一行输入由测试用例的数量T组成 每个测试用例的第一行由每个团队可以拥有的成员数量N组成 每个测试用例的第二行由N个空格分隔的整数组成,这些整数表示团队A成员的能力 每个测试用例的第三行由N个空格分隔的整数组成,代表对手(B)团队成员的力量 约束条件:
- 1N;
int A[n],B[n];
对于(int i=0;i>A[i];
}
对于(int i=0;i>B[i];
}
排序(A,A+n);
排序(B,B+n);
//操作
整数计数=0;
int j=n-1;
对于(int i=n-1;i>=0&&j>=0;){
如果(A[i]>B[j]){
计数++;
我--;
}
j--;
}
cout因为这是一个贪婪算法。我们每次都在挑选最佳选择。你做得对。我们需要对两个数组进行排序。如果我们使用合并排序,那么时间复杂度将是O(nlog(n))
算法设计中非常流行的一种说法是
。应用不同的方法,然后找出这些方法之间的关系。如果你有额外的时间,尽量减少时间复杂度。因为你的算法已经足够优化了。在我看来,这可能是我能做得更好吗?
你无法避免对团队进行排序。因此,最好是O(n logn),因为计数排序不是一个选项here@Damien-你是对的。我想你的意思是O(n log n),而不是O(log n)表示合并排序时间复杂性。是的,你是对的。键入错误!。我正在更改此项。LLONG\u MAX
1 10 3 6 7 5 3 5 6 2 9 1 2 7 0 9 3 6 0 6 2 6