Leetcode每日一题:1046.last-stone-weight(最后一块石头的重量)
题意:每次选择数组中两个最大的元素进行比较:
- 若相等,两个都消除;
- 若不相等,消除两个,留下它们的差;
重复以上操作,求最后数组中剩下的元素;
思路:因为本题中数组最多有30个元素,那么先用sort
排序毫无压力,然后从后向前遍历,先对当前元素和前一个元素作比较,如果相等则i-=2
,否则i-=1 and insert(二者之差)
;如果最后遍历到i==1
时stones[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];
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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 中如何实现缓存的预热?