题解 | #分糖果问题#

分糖果问题

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

解题思路就是把数组切割成 N 个倒叙数组。然后再处理,具体看下面代码注释

/**
 * pick candy
 * @param arr int整型一维数组 the array
 * @return int整型
 */
function candy( arr ) {
    // write code here
    var num = 0, //最少分的糖果
        disList=[], //存每个得分分到的糖果
        arrb = []; //把arr 得分分割成N 个倒叙排列的数组,存到arrb;
    for(i=0;i<arr.length;i++){
        if(i== 0){
            arrb.push([]);
        }
        if(arr[i] > arr[i+1]){
            arrb[arrb.length-1].push(arr[i]);
        }else {
            arrb[arrb.length-1].push(arr[i]);
            arrb[arrb.length] = [];
        }
    };
    for(i=0;i<arrb.length; i++){
        let dis = arrb[i].length; //每一组倒序数组每次要分的糖果最高数量
      //由于切割数组时候有些倒叙数组只有一个值,所以需要判断前当前最高分的数量是否小于前一个数组的最低数量
        if(disList[disList.length - 1] && dis <= disList[disList.length - 1] ){
            if(arrb[i][0] > arrb[i-1][arrb[i-1].length -1] ) {
                dis = disList[disList.length - 1] + 1;
            }
        }
        //开始分糖果,当分糖果第一个分到 dis 数量的也就是最多的糖果。分完第一个第二个分的数量不能是dis-1 需要变成当前倒叙列的长度 -1;这样处理分到最后一个就会只分1个。得到这一组倒叙的分的最少苹果的
        for(k=0;k<arrb[i].length;k++){
            if(k == 0){
                num += dis;
                disList.push(dis);
                dis = arrb[i].length - 1; 
            }else {
                num += dis;
                disList.push(dis);
                dis -= 1;
            }
            
        } 
    }
    return num;
}
module.exports = {
    candy : candy
};
全部评论

相关推荐

02-19 22:55
南京大学 后端
给🐭🐭个面试机会吧:先别急,你投了就知道了,华为和字节的hr跟有指标一样到处捞人,你投完就不理你了
点赞 评论 收藏
分享
2024-12-26 13:00
太原理工大学 Java
会飞的猿:简历没啥大问题啊,感觉是缺少了实习经历。多投投先找个中小厂过渡一下吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务