题解 | #分糖果问题#

刷题记录

代码 2.0 仍然是错误的 QAQ



public class Solution {
    /**
     * pick candy
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int candy (int[] nums) {
        int sum=0;
        int candy[]=new int[arr.length];
        candy[0]=1;
        for (int i = 0; i < arr.length-1; i++) {
            if (arr[i]<arr[i+1]){
                candy[i+1]=candy[i]+1;
            }
            if (arr[i]==arr[i+1]){
                candy[i+1]=candy[i];
            }
            if (arr[i]>arr[i+1]){
                if (candy[i]==1){//关键!!!!
                    candy[i+1]=1;
                    candy[i]=candy[i]+1;
                    for (int j = i; j >0 ; j--) {
                        if (arr[i-1]==arr[i]){
                            candy[i-1]=candy[i];
                        }
                        if (arr[i-1]>arr[i]&&
                                (candy[i-1]<candy[i]||candy[i-1]==candy[i])){
                            candy[i-1]=candy[i]+1;
                        }
                        if (arr[i-1]<arr[i]){
                            break;
                        }
                    }
                }
                if (candy[i]>1){
                    candy[i+1]=1;
                }

            }
        }
        //测试输出
        for (int i = 0; i < candy.length; i++) {
           // System.out.print("****");
            //System.out.print(candy[i]);
            sum=sum+candy[i];
        }
        return sum;
    }
}

代码3.0 仍然错误



public class Solution {
    /**
     * pick candy
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int candy (int[] arr) {
        // write code here
        int sum=0;
        int candy[]=new int[arr.length];
        //candy[0]=1;
        for (int i = 0; i < arr.length-1; i++) {//首   从左到右 上坡
            //candy[i]=1;
            if (arr[i]<arr[i+1]){
                if (candy[i]==0){
                    candy[i]=1;
                }
                candy[i+1]=candy[i]+1;
            }
            if (arr[i]==arr[i+1]){
                if (candy[i]==0){
                    candy[i]=1;
                }
                candy[i+1]=candy[i];
            }
            if(arr[i]>arr[i+1]){
                candy[i+1]=1;
                continue;
            }
        }//尾
        for (int i = arr.length-1; i >0; i--) {//首   从右到左 上坡
            if (arr[i]==arr[i-1]){
                candy[i-1]=candy[i];
            }
            if (arr[i]>arr[i-1]){
                continue;
            }
            if (arr[i]<arr[i-1]){
                if (candy[i-1]==1||candy[i-1]==0){
                    candy[i-1]=candy[i]+1;
                }
            }
        }//尾巴
        for (int i = 0; i < candy.length; i++) {
            sum=sum+candy[i];
        }


        return sum;
    }
}

代码 4.0 运行出错

1、我不知道哪里出了问题 输入一个超长数组 (将系统测试数组arr截断)运行结果与预期是相等的,但是输入系统的测试数组(arr)时 运行结果与预期不一样。我在想,是不是数组长度的问题。 2、在编译器idea上输入统测试数组(arr),系统不会有任何结果 终端只会显示“代码过长”



public class Solution {
    /**
     * pick candy
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int candy (int[] arr) {
        // write code here
        int sum=0;
        int candy[]=new int[arr.length];
        int a=0;
        int b=0;
        for (int i = 0; i < candy.length; i++) {
            candy[i]=1;
        }
        for (int i = 0; i < arr.length-1; i++) {//首   从左到右 上坡
            //candy[i]=1;
            if (arr[i]<arr[i+1]){
                candy[i+1]=candy[i]+1;
            }
            if (arr[i]==arr[i+1]){
                candy[i+1]=candy[i];
            }
            if(arr[i]>arr[i+1]){
                continue;
            }
        }//尾
        for (int i = arr.length-1; i >0; i--) {//首   从右到左 上坡
            if (arr[i]==arr[i-1]){
                candy[i-1]=candy[i];
            }
            if (arr[i]>arr[i-1]){
                continue;
            }
            if (arr[i]<arr[i-1]){
                a=candy[i-1];
                b=candy[i]+1;
                candy[i-1]=Math.max(a,b);
            }
        }//尾巴
        for (int i = 0; i < candy.length; i++) {
            sum=sum+candy[i];
        }
        return sum;
    }
}
## 代码4.0错误原因
## ```曲解题目 上面的代码运算结果比预期大的原因是:相邻分数相同时,我设置糖果数也相同即分数为[1,2,2,2]对应糖果数[1,2,2,2],而题目的意思是:分数为[1,2,2,2]对应糖果数[1,2,1,1]
## 代码5.0 正确!!!

``` import java.util.*;


public class Solution {
    /**
     * pick candy
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public int candy (int[] arr) {
        // write code here
        int sum=0;
        int candy[]=new int[arr.length];
        int a=0;
        int b=0;
        for (int i = 0; i < candy.length; i++) {
            candy[i]=1;
        }
        for (int i = 0; i < arr.length-1; i++) {//首   从左到右 上坡
            //candy[i]=1;
            if (arr[i]<arr[i+1]){
                candy[i+1]=candy[i]+1;
            }
            if (arr[i]==arr[i+1]){//关键点2
                candy[i+1]=1;
            }
            if(arr[i]>arr[i+1]){
                continue;
            }
        }//尾
        for (int i = arr.length-1; i >0; i--) {//首   从右到左 上坡
            if (arr[i]==arr[i-1]){
               // candy[i-1]=candy[i];
            }
            if (arr[i]>arr[i-1]){
                continue;
            }
            if (arr[i]<arr[i-1]){
                a=candy[i-1];
                b=candy[i]+1;
                candy[i-1]=Math.max(a,b);
            }
        }//尾巴
        for (int i = 0; i < candy.length; i++) {
            sum=sum+candy[i];
        }
        return sum;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
12-03 16:28
点赞 评论 收藏
分享
尊嘟假嘟点击就送:加v细说,问题很大
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务