头条2019.3.16笔试第三题,leedcode 135分糖果的变种

有N个参赛者围成一圈 (第0个人和第n - 1个人相邻),每个人有自己的参赛分数。现在给每人发奖品,要求:

(1)每人奖品个数起码为1;(2)如果一人的分数高于左右邻居,则其得到的奖品数目也要大于左右邻居。

 

输入第一个数M是一轮测试中会跑的例子总数;

第二个数N是共有多少个参赛者;

接下来N个数是这些参赛者的分数(按照参赛者围成一圈的顺序排列,第0个挨着第N - 1个)。要求输出最少的奖品数目之和

 

 

 

解题思路:

  • 设置两个临时数组填充为1,
  • 从左往右比较相邻数组,越界用数组长度取余,更新临时数组1
  • 从右往左比较,更新临时数组2
  • 取临时数组相同位置较大数进行累加
  • 累加完毕后的数字即为题目要求输出

出现问题:

  • 同时使用Scanner中的next和nextline函数需要在next()后面添加一行in.nextline,好过滤掉next省略掉的换行符号
  • 定义数组注意越界问题


 

import java.util.Scanner;

public class divide {

    public divide(int[][] arr) {
        // TODO Auto-generated constructor stub
        int len=arr.length;
        int num=0;
        for(int i=0;i<len;i++) {
            int[] temp1=new int[arr[i].length];
            int[] temp2=new int[arr[i].length];
            for(int j=0;j<arr[i].length;j++) {
                temp1[j]=1;
                temp2[j]=1;
            }
            for(int l=0;l<arr[i].length;l++) {
                if(arr[i][l]>arr[i][(l+1)%arr[i].length]) {
                    temp1[l]=temp1[(l+1)%arr[i].length]+1;
                }
            }
            for(int r=arr[i].length-1;r>0;r--) {
                if(r==0) {
                    if(arr[i][r]>arr[i][arr[i].length-1])
                        temp2[r]=arr[i][arr[i].length-1]+1;
                }
                else {
                    if(arr[i][r]>arr[i][r-1])
                        temp2[r]=arr[i][r-1]+1;
                }
                    
            }
            for(int n=0;n<arr[i].length;n++) {
                num+=Math.max(temp1[n], temp2[n]);
            }
            System.out.print(num);
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in=new Scanner(System.in);
        int ybs=in.nextInt();//样本数
        int[][] lunshu=new int[ybs][];
        for(int i=0;i<ybs;i++) {
            int num_man=in.nextInt();
            in.nextLine();//同时使用Scanner中的next和nextline函数需要在next()后面添加一行in.nextline,好过滤掉next省略掉的              lunshu[i]=new int[num_man];        //转行符号
            String str=in.nextLine();
            String[] s=str.split(" ");
            int index=0;
            for(String v:s) {
                lunshu[i][index++]=Integer.parseInt(v);
            }
            //System.out.println(Arrays.toString(lunshu[i]));
        }
        in.close();
        new divide(lunshu);
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值