Leetcode每日一题:1046.last-stone-weight(最后一块石头的重量)


题意:每次选择数组中两个最大的元素进行比较:

  • 若相等,两个都消除;
  • 若不相等,消除两个,留下它们的差;
    重复以上操作,求最后数组中剩下的元素;
    思路:因为本题中数组最多有30个元素,那么先用sort排序毫无压力,然后从后向前遍历,先对当前元素和前一个元素作比较,如果相等则i-=2,否则i-=1 and insert(二者之差);如果最后遍历到i==1stones[i]==stones[i-1]直接return 0,否则return stones[0]

static bool cmp(int a, int b)
{
    return a < b;
}

void Insert(vector<int> &stones, int tar, int len)
{
    if (len == 1)
    {
        stones[0] = tar;
        return;
    }
    for (int i = len - 2; i >= 0; i--)
    {
        if (stones[i] > tar)
        {
            stones[i + 1] = stones[i];
            continue;
        }
        else
        {
            stones[i + 1] = tar;
            return;
        }
    }
    stones[0] = tar;
}

int lastStoneWeight(vector<int> &stones)
{
    int len = stones.size();
    if (len == 1)
        return stones[0];
    if (len == 2)
        return abs(stones[1] - stones[0]);
    // 排序
    sort(stones.begin(), stones.end(), cmp);
    for (int i = len - 1; i > 0; i--)
    {
        // 如果二者相等,则消除
        if (stones[i] == stones[i - 1])
        {
            if (i == 1)
                return 0;
            i -= 1;
            continue;
        }
        // 否则消除后插入二者差值
        Insert(stones, abs(stones[i] - stones[i - 1]), i);
    }
    return stones[0];
}

posted @   Luweir  阅读(80)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示