题目链接
我的写法:(双重for的低能算法,能用就行,剩下的交给运维)
int partitionDisjoint(int* nums, int numsSize){
int min=nums[0];
int max=nums[0];
int min_pos=0;
int max_pos=0;
for(int i=1;i<numsSize;++i)
{
if(nums[i]<min)
{
min=nums[i];
min_pos=i;
}
if(nums[i]>max)
{
max=nums[i];
max_pos=i;
}
}
int leftmax=nums[0];
if(min==max)
return 1;
if(min_pos==max_pos-1)
return min_pos+1;
else
{
for(int i=0;i<numsSize;++i)
{
for(int j=i+1;j<numsSize;++j)
{
if(leftmax>nums[j])
{if(nums[i+1]>leftmax)leftmax=nums[i+1];
break;}
if(j==numsSize-1)
return i+1;
}
}
}
return 0;
}
//全相同:min=max
// min_pos在max_pos之前,在此划分
// 左边最大值<右边最小
官方题解:
时间复杂度:O(n)
空间复杂度:O(1)
算法效率极致