LeetCode-1046. Last Stone Weight(最后一块石头的重量)

本文介绍了一个基于贪心算法解决最后石头重量问题的方法。通过降序排序石头重量,并不断选取最重两块石头进行碰撞,直至只剩一块或无石头剩余。采用C语言实现,利用并归排序或qsort函数进行排序,最终返回最后一块石头的重量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最后一块石头的重量

在这里插入图片描述

Last Stone Weight

在这里插入图片描述

降序排序,每次 选取最重的。应该算是贪心吧。(话说中文的为啥没有样例233)

由于C语言没有sort函数,所以这里用的是并归排序

void Merge(int a[], int left, int mid, int right)
{
    int len = right - left + 1;//数组长度
    int temp[len];
    int k = 0;
    int i = left;//前一数组起始
    int j = mid + 1;//后一数组起始

    while(i <= mid && j <= right){
        temp[k++] = a[i] > a[j] ? a[i++] : a[j++];
        //将最大的存入数组
    }
    while(i <= mid){
        temp[k++] = a[i++];
    }
    while(j <= right){
        temp[k++] = a[j++];
    }
    for (k = 0; k < len; k++){
        a[left++] = temp[k];
    }
}

void MergeSort(int a[], int left, int right)
{
    if (left == right){
        return;
    }
    int mid = (left + right) / 2;
    MergeSort(a, left, mid);
    MergeSort(a, mid + 1, right);
    Merge(a, left, mid, right);
}

int lastStoneWeight(int *stones, int stonesSize)
{
    while (stonesSize > 1){
        MergeSort(stones, 0, stonesSize - 1);
        if (stones[1] == 0){
            break;
        }
        stones[0] -= stones[1];
        stones[1] = 0;
    }

    return stones[0];
}

结果
在这里插入图片描述

C语言虽然没有sort函数,但我们可以使用qsort函数

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

int lastStoneWeight(int *stones, int stonesSize)
{
    while (stonesSize > 1){
        //MergeSort(stones, 0, stonesSize - 1);
        qsort(stones, stonesSize, sizeof(stones[0]), comp);
        if (stones[1] == 0){
            break;
        }
        stones[0] -= stones[1];
        stones[1] = 0;
    }

    return stones[0];
}

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值