第六天打卡。
1、两个数对之间的最大乘积差
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int maxProductDifference(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int ),cmp);
return nums[numsSize-1]*nums[numsSize-2]-nums[1]*nums[0];
}
2、三角形的最大周长
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int largestPerimeter(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int ),cmp);
for(int i=numsSize-1;i>=2;--i){
if(nums[i-2]+nums[i-1]>nums[i]){
return nums[i-2]+nums[i-1]+nums[i];
}
}
return 0;
}
3、数组拆分Ⅰ
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int arrayPairSum(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int ),cmp);
int ans=0;
for(int i=0;i<numsSize;i+=2){
ans+=nums[i];
}
return ans;
}
4、救生艇
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int numRescueBoats(int* people, int peopleSize, int limit){
int ans=0;
int i=0;int r=peopleSize-1;
qsort(people,peopleSize,sizeof(int ),cmp);
while(i<=r){
if(i==r){
++ans;break;
}else if(people[i]+people[r]>limit){
++ans;r--;
}else{
++ans;i++;r--;
}
}
return ans;
}
5、摆动排序Ⅱ
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
void wiggleSort(int* nums, int numsSize){
int *ret = (int *)malloc(numsSize*sizeof(int ));
int i,r;
for(i=0;i<numsSize;++i){
ret[i]=nums[i];
}
qsort(ret,numsSize,sizeof(int ),cmp);
r=numsSize-1;
for(i=1;i<numsSize;i+=2){
nums[i]=ret[r--];
}
for(i=0;i<numsSize;i+=2){
nums[i]=ret[r--];
}
return nums;
}
6、分发饼干
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize){
int ans=0;
qsort(g,gSize,sizeof(int ),cmp);
qsort(s,sSize,sizeof(int ),cmp);
int i=gSize-1;int j=sSize-1;
while(i>=0&&j>=0){
if(s[j]>=g[i]){
--i;--j;
++ans;
}else{
--i;
}
}
return ans;
}
7、最少操作使数组递增
int minOperations(int* nums, int numsSize){
int ans=0;
int pre=nums[0]+1;
for(int i=1;i<numsSize;++i){
if(pre<nums[i]){
pre=nums[i]+1;
}else{
ans+=pre-nums[i];
++pre;
}
}
return ans;
}
8、使数组唯一的最小增量
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int minIncrementForUnique(int* nums, int numsSize){
int ans=0;
qsort(nums,numsSize,sizeof(int ),cmp);
for(int i=1;i<numsSize;++i){
while(nums[i]<=nums[i-1]){
ans++;
nums[i]++;
}
}
return ans;
}
9、有效三角形的个数
int cmp(int *a,int *b){
return *(int *)a-*(int *)b;
}
int triangleNumber(int* nums, int numsSize){
qsort(nums,numsSize,sizeof(int ),cmp);
int i;
int ans=0;
for(i=0;i<numsSize;++i){
int j=i+1;
int k=j+1;
while(j<numsSize){
while(k<numsSize){
if(nums[i]+nums[j]<=nums[k]){
break;
}
++k;
}
ans+=k-j-1;
++j;
if(j==k) k++;
}
}
return ans;
}
2021年11月28日