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

嘟嘟嘟的小火车 2021-11-29 00:08:29

1913. 两个数对之间的最大乘积差

int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
int maxProductDifference(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),cmp);
    return nums[numsSize-2]*nums[numsSize-1]-nums[0]*nums[1];
}

976. 三角形的最大周长

int cmp(const void *a,const void *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; 
}

561. 数组拆分 I

int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
int arrayPairSum(int* nums, int numsSize){
    int sum=0;
    qsort(nums,numsSize,sizeof(int),cmp);
    for(int i  = 0;i < numsSize; i++){
        if(i%2==0){
            sum += nums[i];
        }
    }
    return sum;
}

881. 救生艇

int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
int numRescueBoats(int* people, int peopleSize, int limit){
    int ans = 0;
    int l = 0;int r = peopleSize - 1;
    qsort(people,peopleSize,sizeof(int),cmp);
    while(l<=r){
        if(l == r){
            ans++;
            break;
        }
        else if(people[l]+people[r]>limit){
            ans++,r--;
        }
        else{
            ans++,r--,l++;
        }
    }
    return ans;
}

324. 摆动排序 II

int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
void wiggleSort(int* nums, int numsSize){
    int r = numsSize - 1;
    int *ret = (int *)malloc(sizeof(int)*numsSize);
    for(int i = 0 ; i < numsSize; i++){
        ret[i] = nums[i];
    }
    qsort(ret,numsSize,sizeof(int),cmp);
    for(int i = 1; i < numsSize; i += 2){
        nums[i] = ret[r--];
    }
    for(int i = 0;i < numsSize; i += 2){
        nums[i] = ret[r--];
    }
}

455. 分发饼干

int cmp(const void *a,const void *b){
    return *(int *)a-*(int *)b;
}
int findContentChildren(int* g, int gSize, int* s, int sSize){
    int ans = 0;int l = gSize - 1;int n = sSize - 1;
    qsort(g,gSize,sizeof(int),cmp);
    qsort(s,sSize,sizeof(int),cmp);
    while(l>=0&&n>=0){
        if(s[n]>=g[l]){
            n--,l--,ans++;
        }
        else{
            l--;
        }
    }
    return ans;
}

1827. 最少操作使数组递增

int minOperations(int* nums, int numsSize){
    int i;
    int ans = 0;
    for(i = 1; i < numsSize; ++i) {
        if(nums[i-1] >= nums[i]) {
            ans += nums[i-1] - nums[i]+1;
            nums[i] = nums[i-1] + 1;
        }   
    } 
    return ans;
}

945. 使数组唯一的最小增量

int minIncrementForUnique(int* nums, int numsSize){
    int res = 0;
    int pos[400001];
    memset(pos, -1, sizeof(int) * 400001);
    for (int i = 0; i < numsSize; ++i) {
        int a = nums[i];
        int b = findPos(a, pos);
        res += b-a;
    }
 
    return res;
}
int findPos(int a, int pos[])
{
    int b = pos[a];
    if (b == -1)
    {
        pos[a] = a;
        return a;
    }
    b = findPos(b+1, pos);
    pos[a] = b;
    return b;
}

611. 有效三角形的个数

int cmp(const void *a, const void *b) {
    return *(int *)a - *(int *)b;
}

int triangleNumber(int* nums, int numsSize){
    int i, j, k;
    int ans = 0;
    qsort(nums, numsSize, sizeof(int), cmp);       
    for(i = 0; i < numsSize; ++i) {
        j = i + 1;
        k = j + 1;                                 
        while(j < numsSize) {
            while(k < numsSize) {
                if(nums[i] + nums[j] <= nums[k]) {
                    break;                         
                }
                ++k;               
            }
            ans += k-j-1;                          
            ++j;                                   
            if(k == j) k++;
        }
        
    }    
    return ans;
}

 

...全文
68 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

64,081

社区成员

发帖
与我相关
我的任务
社区描述
学习「 算法 」的捷径就是 「 题海战略 」,社区由「 夜深人静写算法 」作者创建,三年ACM经验,校集训队队长,亚洲区域赛金牌,世界总决赛选手。社区提供系统的训练,答疑解惑,面试经验,大厂内推等机会
社区管理员
  • 英雄哪里出来
  • 芝麻粒儿
  • Amy卜bo皮
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

QQ群:480072171

英雄算法交流 8 群

 

试试用AI创作助手写篇文章吧