美团点评研发笔试题

最大差值

有一个长为n的数组A,求满足0≤a≤b

给定数组A及它的大小n,请返回最大差值。
测试样例:

[10,5],2

返回:0

解题思路:遍历数组的每个数与他后面的数的差值,用max比较,存放最大差值

import java.util.*;

public class LongestDistance {
    public int getDis(int[] A, int n) {
        // write code here
        int max=0;

        for(int i=0;i<n;i++)
            {
            for(int j=n-1;j>i;j--)
                {
                if(max<A[j]-A[i])
                    max=A[j]-A[i];
            }
        }
        return max;
    }
}

棋子翻转

4x4的棋盘上摆满了黑白棋子,黑白两色的位置和数目随机其中左上角坐标为(1,1),右下角坐标为(4,4),现在依次有一些翻转操作,要对一些给定支点坐标为中心的上下左右四个棋子的颜色进行翻转,请计算出翻转后的棋盘颜色。

给定两个数组A和f,分别为初始棋盘和翻转位置。其中翻转位置共有3个。请返回翻转后的棋盘。
测试样例:

[[0,0,1,1],[1,0,1,0],[0,1,1,0],[0,0,1,0]],[[2,2],[3,3],[4,4]]

返回:[[0,1,1,1],[0,0,1,0],[0,1,1,0],[0,0,1,0]]

解题思路:题意的翻转就是上下左右0就变1,1就变0,知道题意就好做了,先f数组一个一个定位到那个坐标点,然后在A数组的该坐标点的上下左右0就变1,1就变0,当然也处理好边界,不能小于0和大于3

import java.util.*;

public class Flip {
    public int[][] flipChess(int[][] A, int[][] f) {
        // write code here
        int length=f.length;
        int row=0;
        int col=0;
        for(int i=0;i<length;i++){
            row=f[i][0]-1;
            col=f[i][1]-1;
            if(row-1>=0)
                {
                A[row-1][col]= A[row-1][col]==0?1:0;
            }
            if(row+1<=3)
                {
                  A[row+1][col]= A[row+1][col]==0?1:0;
            }
            if(col-1>=0)
                {
                A[row][col-1]=A[row][col-1]==0?1:0;
            }
            if(col+1<=3)
                {
                A[row][col+1]=A[row][col+1]==0?1:0;
            }  
    }
        return A;
}
}

平均年龄

已知某公司总人数为W,平均年龄为Y岁(每年3月末计算,同时每年3月初入职新人),假设每年离职率为x,x>0&&x<1,每年保持所有员工总数不变进行招聘,新员工平均年龄21岁。
从今年3月末开始,请实现一个算法,可以计算出第N年后公司员工的平均年龄。(最后结果向上取整)。
输入描述:

输入W Y x N



输出描述:

输出第N年后的平均年龄


输入例子:

5 5 0.2 3


输出例子:

15

解题思路:注意每年平均年龄+1和向上取整就行
还有在牛客网在输入要do{}while(in.hasNext());要不然没有输出值

import java.util.Scanner;

public class Main{
    public static int  average(int W,float Y,float x,int N){
        float sum = 0;
        for(int i=0;i<N;i++){
            sum =W*x*21+W*(1-x)*Y;
            Y=sum/W;
              Y++;
        }

        return (int) Math.ceil(sum/W);
    }

    public  static  void main(String[] args){
        Scanner in=new Scanner(System.in);
       do{

         int W=in.nextInt();
        float Y=in.nextFloat();
        float x=in.nextFloat();
        int N=in.nextInt();
        System.out.println(Main.average(W,Y,x,N));
       } while(in.hasNext());

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值