2020/04/02美团客户端笔试题目记录

5个编程题目

题目1:删除最少数使得差值小于sub

示例:
输入:
5 2
2 1 3 2 5
输出:
1

代码:

import java.util.Arrays;
import java.util.Scanner;
public class Main { 
	public static void main(String[] args) {
	Scanner scanner = new Scanner(System.in);
    int n,sub;
   while(scanner.hasNext()) {
	   n = scanner.nextInt();
	   sub = scanner.nextInt();
	   int[] nums = new int[n];
	   for (int i = 0; i < nums.length; i++) {
		nums[i] = scanner.nextInt();
	}
	    Arrays.sort(nums);
    	System.out.println(getMin(nums, sub));
	}    
}
	//01
	public static int getMin(int[] nums,int sub) {
		int ans = 0;
		int n=nums.length;
		if(n == 1) return 0;
		int res = nums[n-1] - nums[0];
		if(res >sub) {
			int[] nums1 = Arrays.copyOfRange(nums, 0, n-2);
			int[] nums2 = Arrays.copyOfRange(nums, 1, n-1);
			ans = 1+Math.min(getMin(nums1, sub), getMin(nums2, sub));
		}
		return ans;
	}
}

通过18%

题目2:房间游戏,有n个房间,m点法力值,依次循环经过这n个房间,在每个房间留下足迹,需要消耗一定得法力值,请求出最多能在几个房间留下法力值(可循环重复在房间留下足迹)。

示例:
输入:
4 10
1 3 5 2
输出:
4

代码:

import java.util.Scanner;
public class Main { 
	public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n,m;
		n = scanner.nextInt();
		m = scanner.nextInt();
		int[] fangjian = new int[n];
		int count = 0;
		int min = Integer.MAX_VALUE;
		int sum = 0;
		for(int i =0;i<n;i++) {
			fangjian[i] = scanner.nextInt();
			if(fangjian[i]<min)min = fangjian[i];
			sum +=fangjian[i];
			m -=fangjian[i];
			if(m>=0) {
				count++;
			}
			else {
				m +=fangjian[i];
			}
		}
		if(m == min)count++;
		if(m>min&&m<=sum) {
			for(int i =0;i<n;i++) {
			m -=fangjian[i];
			if(m>=0) {
				count++;
			}
			else {
				m +=fangjian[i];
			}
		}
		}
		if(m>sum) {
			count += (m/sum)*n;
			if(m%sum == min)count++;
			if(m%sum>min) {
				for(int i =0;i<n;i++) {
					m -=fangjian[i];
					if(m>=0) {
						count++;
					}
					else {
						m +=fangjian[i];
					}
				}
			}
		}

  	   System.out.println(count);
	}    
}

AC通过
还有一个位运算得题目,具体想不起来了。
其他题目没时间做,也就更没印象了,欢迎大佬补充,以及留下自己的代码。

你可能感兴趣的:(面试笔记)