zoukankan      html  css  js  c++  java
  • leetcode @python 135. Candy

    题目链接

    https://leetcode.com/problems/candy/

    题目原文

    There are N children standing in a line. Each child is assigned a rating value.

    You are giving candies to these children subjected to the following requirements:

    • Each child must have at least one candy.
    • Children with a higher rating get more candies than their neighbors.

    What is the minimum candies you must give?

    题目大意

    有n个小孩排成一列,每个小孩有一个value值,现在要给这群小孩分糖果,需要满足下面两个条件:1.每个小孩至少要有一颗糖果 2.value值比较高的小孩的糖果数要比站在他旁边的小孩多

    解题思路

    1.每个小孩的初始糖果值为1
    2.从头开始遍历,保证位于位置i的value值高的小孩肯定比位置i-1的小孩糖果数要多
    3.从后往前遍历,保证位于位置i-1的value值高的小孩肯定比位置i的小孩糖果数要多
    4.求和

    代码

    class Solution(object):
        def candy(self, ratings):
            """
            :type ratings: List[int]
            :rtype: int
            """
            n = len(ratings)
            candy = [1 for i in range(n)]
            for i in range(1, n):
                if ratings[i] > ratings[i - 1]:
                    candy[i] = candy[i-1] + 1
    
            for i in range(n - 1, 0, -1):
                if ratings[i] < ratings[i - 1] and candy[i] >= candy[i - 1]:
                    candy[i - 1] = candy[i] + 1
    
            return sum(candy)
    
  • 相关阅读:
    Sgu294He's Circles
    [HNOI2008]Card洗牌
    传球游戏
    [BZOJ1478]Sgu282 Isomorphism
    [POJ2154]Color
    [ZOJ1961]Let it Bead
    BZOJ1257 [CQOI2007]余数之和sum
    BZOJ1192 [HNOI2006]鬼谷子的钱袋
    BZOJ4614 [Wf2016]Oil
    BZOJ3209 花神的数论题
  • 原文地址:https://www.cnblogs.com/slurm/p/5366982.html
Copyright © 2011-2022 走看看