对于某一数组,为完成某个任务,我们可能需要对数组进行排序,这也是十分常见的解题方案。为减少时间复杂度,一般情况我们一上来就使用快速排序,既简单有高效。但也要具体问题具体分析。如下面这道leetcode题。当我们使用快速排序先对数组进行排序时,那说明你要上当了。
有题目知道,我们只要找到三条边满足较小的俩边大于第三边即可。所有在排序找到最大的三条边之后就可以开始进行判断比较了,如果满足要求,那么就可以直接返回而不需要进行进一步的排序工作。
class Solution {
public:
int largestPerimeter(vector<int>& A) {
int n = A.size();
for(int i = 0; i < n; i++)
{
int j;
for(j = n - 2; j >= i; j--)
{
if(A[j] < A[j + 1])
mySwap(&A[j], &A[j + 1]);
}
if(i >= 2)
{
if(A[j + 1] + A[j] > A[j - 1])
return A[j + 1] + A[j] + A[j - 1];
}
}
return 0;
}
void mySwap(int* a, int* b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}
};