• 美团笔试


    一、逻辑推理题*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即可得
  • 相关阅读:
    批量修改数据后应收集统计信息
    this,this,再次讨论javascript中的this,超全面
    javascript中的闭包,超简单论述,保证小学生必懂
    有四中方法可以实现PHP的伪静态,你造吗?
    javascript 事件传播与事件冒泡,W3C事件模型
    浅谈asp.net性能
    div浮动层 兼容IE FF
    我们这些程序员
    c++学习笔记_1
    windows下hexo+github搭建个人博客
  • 原文地址:https://www.cnblogs.com/lizijiangmm/p/8634782.html
Copyright © 2020-2023  润新知