题解 | #分糖果问题#

分糖果问题

http://www.nowcoder.com/practice/76039109dd0b47e994c08d8319faa352

/**
 * 解法:贪心
 * 思路:
 *   要想分出最少的糖果,利用贪心思想,肯定是相邻位置没有增加的情况下大家都分到1, 
 *   相邻位置有增加的情况下,分到糖果数加1就好。什么情况下会增加糖果,相邻位置有得
 *   分差异,可能是递增可能是递减,如果是递增的话,糖果依次加1,如果是递减糖果依次减1?
 *   这不符合最小,必须从1开始加才是最小,那我们可以反向加1.
 * 时间复杂度:O(n),单独遍历两次.
 * 空间复杂度:O(n)。记录每个位置糖果数的辅助数组.
 */
export function candy(arr: number[]): number {
    const len = arr.length
    if (len <= 1) return len
    let nums: number[] = []
    for (let i = 0; i < len; i++) {
        nums[i] = 1
    }
    for (let i = 1; i < len; i++) {
        if (arr[i] > arr[i - 1]) { // 如果右边在递增,每次增加一个
            nums[i] = nums[i - 1] + 1
        }
    }

    let res = nums[len - 1] // 记录总糖果数
    for (let i = len - 2; i >= 0; i--) {
        if (arr[i] > arr[i + 1] && nums[i] <= nums[i + 1]) { // 如果左边更大但是糖果树更小
            nums[i] = nums[i + 1] + 1
        }
        res += nums[i] // 累加和
    }

    return res
}

一站式解决前端面试高频算法题

https://github.com/hovinghuang/fe-agorithm-interview

全部评论

相关推荐

昨天 11:16
湖南大学 Web前端
我看到好多人都在说0offer好焦虑,结果一看是投了百度快手字节啥的。好像大家都是只想通过校招进大厂,对小公司是不考虑的吗😂可是能进大厂的难道不是只有少部分人吗,真心发问
梦想是成为七海千秋:沉默的大多数吧,喜欢晒的都是能引起共鸣的大厂,找小厂的人,别人也不认识你这个小厂,就自己偷偷找了实际上大多数人哪有什么机会能找到大厂
点赞 评论 收藏
分享
北漂的牛马人:211佬,包进的,可能是系统问题
点赞 评论 收藏
分享
牛客517626884号:嵌入式真难啊今年,我电赛国二都成了路边野狗了
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务