美团笔试

一、逻辑推理题*20

二、专业基础*30

考的比较杂,但是基本上不难

1、各种排序的时间空间复杂度

2、测试基本路径

3、居然考了编译原理

4、阅读代码

5、比较简单的基础题

三、编程题*2

1、给定字符串:包含‘0’~‘9’中任意个数的字符,输出该字符串不能组成的最小正整数

输入:123456789(字符串长度至少为1)

输出:10

解题思路:

首先,对各个数字出现的次数进行统计,用数组count[10]来记录

其次,总共分为两种情况:数字‘0’出现次数为0和不为0

count[0] = 0,又分为两种情况:

1)数字1~9都出现:找出出现次数count[i]最少的数字,若有多个则取最小的数字i,输出”iiiii“(次数为count[i]次)+”0“

2)数字1~9没有都出现:找出未出现的最小数字x,输出x

count[0] != 0情况

1)数字1~9都出现:找出出现次数最小且非0的数字x,输出count[x]+1次x

2)数字1~9没有都出现:找出次数为0且最小的数字输出

 1 import java.util.Scanner;
 2  3 
 4 public class Main {
 5     public static void main(String[] args){
 6         Scanner sc = new Scanner(System.in);
 7         String input = sc.next();
 8         int[] count = {0,0,0,0,0,0,0,0,0,0};
 9         
10         for (int i = 0; i < input.length(); i++) {
11             count[input.charAt(i)-'0']++;
12         }
13         //找出出现次数最少且最小的数字
14         int min = 10,t=0,sum = 0;
15         for(int i = 1 ;i<count.length;i++)
16         {
17             if (count[i]!=0) sum++;
18             if(min>count[i]) {
19                 min = count[i];
20                 t = i;
21             }         
22         }
23         if(sum == 0) 
24             {
25                 System.out.println("1");
26                 return;
27             }
28         //无0的情况
29         StringBuilder str = new StringBuilder();
30         if(count[0]==0) {
31             if(sum == 9) {
32                 int k = count[t];
33                 while(k>0) {
34                     str.append(t);
35                     k--;
36                 }
37                 str.append(0);
38                 System.out.println(str);
39             }
40             else
41                 System.out.println(t);
42         }
43         //有0的情况
44         else {
45             if(sum == 9) {
46                 int k = count[t]+1;
47                 while(k>0) {
48                     str.append(t);
49                     k--;
50                 }
51                 System.out.println(str);
52             }
53             else System.out.println(t);
54         }
55     }
56    
57 }

2、给一个圆,在圆上取n个点,每次取两个点连线,不能相交,最多能连多少条线?

输入:n(点的个数)

输出:x(最多能连多少条线)

2*n-3即可得

 

posted @ 2018-03-23 21:12  菩提本无树呀~  阅读(350)  评论(0编辑  收藏  举报