当前位置: 首页 > java >正文

leetcode 135. 分发糖果

问题分析

LeetCode 135题“分发糖果”要求给一排孩子分发糖果,每个孩子至少得到1个糖果,且相邻孩子中评分高的孩子必须获得更多糖果,求最少需要多少糖果。

解题思路

这个问题可以通过两次遍历的贪心算法来解决:

  1. 第一次从左到右遍历:确保每个孩子如果比左边孩子评分高,则获得更多糖果。
  2. 第二次从右到左遍历:确保每个孩子如果比右边孩子评分高,则获得更多糖果。

这种方法保证了每个孩子与相邻孩子的比较条件都被满足,同时使用最少的糖果数。

代码实现

下面是使用C++实现的代码:

#include <vector>
using namespace std;class Solution {
public:int candy(vector<int>& ratings) {int n = ratings.size();if (n <= 1) return n;// 初始化每个孩子至少有1个糖果vector<int> candies(n, 1);// 从左到右遍历,确保右边评分高的孩子获得更多糖果for (int i = 1; i < n; i++) {if (ratings[i] > ratings[i-1]) {candies[i] = candies[i-1] + 1;}}// 从右到左遍历,确保左边评分高的孩子获得更多糖果for (int i = n-2; i >= 0; i--) {if (ratings[i] > ratings[i+1]) {// 取两次遍历结果的最大值,确保同时满足两个方向的条件candies[i] = max(candies[i], candies[i+1] + 1);}}// 计算总糖果数int total = 0;for (int candy : candies) {total += candy;}return total;}
};

题目

https://leetcode.cn/problems/candy/solutions/533150/fen-fa-tang-guo-by-leetcode-solution-f01p/?envType=study-plan-v2&envId=selected-coding-interview

代码解释

  1. 初始化糖果数组

    • 创建一个长度为n的数组candies,初始值都为1,表示每个孩子至少有1个糖果。
  2. 第一次遍历(从左到右)

    • 从第二个孩子开始,如果当前孩子评分高于前一个孩子,则当前孩子的糖果数为前一个孩子的糖果数加1。
  3. 第二次遍历(从右到左)

    • 从倒数第二个孩子开始,如果当前孩子评分高于后一个孩子,则当前孩子的糖果数取candies[i]candies[i+1]+1中的较大值。
    • 这确保了当前孩子的糖果数同时满足左右两个方向的比较条件。
  4. 计算总糖果数

    • 遍历糖果数组,累加所有糖果数得到结果。

复杂度分析

  • 时间复杂度:O(n),其中n是孩子的数量。需要遍历数组两次。
  • 空间复杂度:O(n),需要额外的数组来存储每个孩子的糖果数。

这种方法通过两次遍历,巧妙地解决了相邻孩子之间的比较关系,确保了使用最少的糖果数。

http://www.xdnf.cn/news/13542.html

相关文章:

  • 大模型Transformer触顶带来的“热潮退去”,稀疏注意力架构创新或是未来
  • HarmonyOSNext全栈数据存储双星解析:轻量级VS关系型存储终极指南
  • Linux 复制文件到另一个文件夹方法
  • 鹰盾视频加密器播放器Win32系统播放器兼容开发的技术要点与实践指南
  • [Linux入门] Linux安装及管理程序入门指南
  • VUE2个人博客系统
  • 禁止 Windows 更新后自动重启
  • 【鸿蒙表格组件】鸿蒙ArkTS轻量级表格高效渲染组件
  • Android Compose 自定义圆形取色盘
  • vscode 保存 js 时会自动格式化,取消设置也不好使
  • 运维之十个问题--2
  • ​​P值在双侧检验中的计算方法
  • 企业常见流量异常有哪些?
  • Cambridge Pixel为警用反无人机系统(C-UAS)提供软件支持
  • Vue2数组响应式问题:Object.defineProperty不能监听数组吗
  • ES Modules 与 CommonJS 的核心区别详解
  • python的时间管理库whenever的使用
  • Office2019下载安装教程(2025最新永久方法)(附安装包)
  • 【Vue】组件及组件化, 组件生命周期
  • 【AI大模型入门指南】概念与专有名词详解 (二)
  • CSP-J 2020 入门级 第一轮 阅读程序(1)
  • 【Zephyr 系列 19】打造 BLE 模块完整 SDK:AT 命令系统 + 状态机 + NVS + OTA 一体化构建
  • 华为云Flexus+DeepSeek征文 | 基于Dify构建多语言文件翻译工作流
  • NIFI在Linux系统中的系统配置最佳实践(性能调优)
  • UE5 读取配置文件
  • 【笔记】代码开发中常用环境配置与好用工具
  • Android12 开机后桌面加载框的适配
  • 拼音分词器的配置
  • kubernetes--通俗理解Sidecar容器
  • WinHex 20.8-SR1 安装教程详细步骤+下载