[打卡帖]《LeetCode零基础指南》(第七讲) 贪心

罅隙 C语言圣王
C/C++领域新星创作者
2021-12-06 19:47:41

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 - 1] * nums[numsSize - 2] - 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 - 3; i >= 0; i--)
    {
        if(nums[i] + nums[i+1] > nums[i+2])
            return nums[i] + nums[i+1] + nums[i+2];
    }
    return 0;
}

561. 数组拆分 I

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

int arrayPairSum(int* nums, int numsSize)
{
    int cnt = 0;
    qsort(nums, numsSize, sizeof(int), cmp);
    for(int i = 0; i < numsSize; i += 2)
    {
        cnt += nums[i];
    }
    return cnt;
}

324. 摆动排序 II

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

void wiggleSort(int* nums, int numsSize)
{
    int* tmp = (int*)malloc(sizeof(int) * numsSize);
    for(int i = 0; i < numsSize; i++)
        tmp[i] = nums[i];

    qsort(tmp, numsSize, sizeof(int), cmp);
    int ret = numsSize - 1;
    for(int i = 1; i < numsSize; i += 2)
        nums[i] = tmp[ret--];

    for(int i = 0; i < numsSize; i += 2)
        nums[i] = tmp[ret--];
}

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 max  = 0;
    int p1 = 0;
    int p2 = 0;
    qsort(g, gSize, sizeof(int), cmp);
    qsort(s, sSize, sizeof(int), cmp);

   while(p1 < gSize && p2 < sSize)
   {
        while(p2 < sSize && g[p1] > s[p2])
            p2++;
        if(p2 < sSize)//说明p2存在
        {
            max++;
            p1++;
            p2++;
        }
   }
    return max;
}

1827. 最少操作使数组递增

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

611. 有效三角形的个数

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

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

 

...全文
72 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-数据结构与算法 发布问题, 以便更快地解决您的疑问

64,075

社区成员

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

QQ群:480072171

英雄算法交流 8 群

 

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