135. 分发糖果(leetcode)
https://leetcode.cn/problems/candy/description/
贪心,策略是确定一侧的正确性,再确定另一侧的正确性,最后综合作为正确答案,其中先确定一侧的正确性是局部最优,确定两侧的正确性的局部最优,且找不到反例就可以推出全局最优答案
class Solution {
public int candy(int[] ratings) {
int[] num=new int[ratings.length];
Arrays.fill(num,1);
// 计算右边孩子大于左边孩子的情况
for(int i=1;i<ratings.length;i++)
if(ratings[i]>ratings[i-1])
num[i]=num[i-1]+1;
// 计算左边孩子大于右边孩子的情况
for(int i=ratings.length-2;i>=0;i--)
if(ratings[i]>ratings[i+1])
{
// 取左边和右边+1的最大值,作为本值
// 即只需要比相邻的最大值大1即可
// 即 : num[i]=Math.max(num[i-1],num[i+1]+1);
// 但是上面的循环已经计算过了,此时的num[i]一定比左边大,因此只需要让num[i]和num[i+1]+1比较即可
num[i]=Math.max(num[i],num[i+1] + 1);
}
int res=0;
for(int i=0;i<ratings.length;i++)res+=num[i];
return res;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理