[学习报告]《LeetCode零基础指南》(第七讲)贪心

第六天打卡。

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日

猜你喜欢

转载自blog.csdn.net/weixin_48989391/article/details/121589999
今日推荐