京东笔试ak贴 2021/9/11

第一题:键盘输入
package jdtest;

import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**

  • @author: long
  • @date: 2021/9/11 20:02
  • @description:
  • /
    public class Main1 {
    public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      int n = in.nextInt(), m = in.nextInt();
      int x = in.nextInt(), y = in.nextInt(), z = in.nextInt();
      String[] keyboard = new String[n];
      in.nextLine();
      for(int i=0;i<n;i++){
          keyboard[i] = in.nextLine();
      }
      String str = in.nextLine();
      char[][] keyboardChArray = new char[n][];
      //将字符串转化为字符串数组
      for(int i=0;i<n;i++){
          keyboardChArray[i] = keyboard[i].toCharArray();
      }
      //构建HashMap,保存每个字符的位置
      Map<Character,int[]> map = new HashMap<>();
      for(int i=0;i<n;i++){
          for(int j=0;j<m;j++){
              map.put(keyboardChArray[i][j],new int[]{i,j});
          }
      }
      //pre数组保存前一个字符位置
      int[] pre = new int[]{0,0};
      long time = 0;
      for(int i=0;i<str.length();i++){
          //拿到新的位置
          char ch = str.charAt(i);
          int row = map.get(ch)[0];
          int col = map.get(ch)[1];
          if(row == pre[0] && col == pre[1]){  //同一字符
              time += z;
          } else if(row == pre[0] || col == pre[1]){ //同行或同列字符不转向
              time += (Math.abs(row - pre[0]) + Math.abs(col - pre[1])) * x;
              time += z;
          } else{
              time += y;
              time += (Math.abs(row - pre[0]) + Math.abs(col - pre[1])) * x;
              time += z;
          }
          pre[0] = row;
          pre[1] = col;
      }
      System.out.println(time);
    }
    }

第二题:systemd
package jdtest;

import java.util.*;

/**

  • @author: long
  • @date: 2021/9/11 19:34
  • @description: 构建两个List,postList保存每个服务后继的服务列表,用来找到开启某个服务后随之开启的服务
  • preList保存每个服务前继的服务列表,用来找到关闭某个服务后随之关闭的服务
  • /
    public class Main2 {
    public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      int n = in.nextInt();
      int q = in.nextInt();
      List<List<Integer>> postlist = new ArrayList<>();
      List<List<Integer>> prelist = new ArrayList<>();
      for(int i=0;i<=n;i++){
          postlist.add(new ArrayList<>());
          prelist.add(new ArrayList<>());
      }
      for(int i=1;i<=n;i++){
          int c = in.nextInt();
          for(int j=0;j<c;j++){
              int y = in.nextInt();
              postlist.get(i).add(y);
              prelist.get(y).add(i);
          }
      }
      //用一个set保存开启的服务
      Set<Integer> set = new HashSet<>();
      //保存每次操作结果
      int[] res = new int[q];
      int idx = 0;
      for(int i=0;i<q;i++){
          int x = in.nextInt();
          int y = in.nextInt();
          //建立队列,将开启的服务或关闭的服务加入队列
          Queue<Integer> queue = new LinkedList<>();
          queue.add(y);
          //开启状态
          if(x == 1){
              while(!queue.isEmpty()){
                  int z = queue.poll();
                  set.add(z);
                  for(Integer task : postlist.get(z)){
                      //如果服务已经开启了,就不要加入队列,否则产生循环依赖超时
                      if(!set.contains(task)){
                          queue.add(task);
                      }
                  }
              }
              res[idx++] = set.size();
          } else{  //关闭状态
              while(!queue.isEmpty()){
                  int z = queue.poll();
                  set.remove(z);
                  for(Integer task : prelist.get(z)){
                      if(set.contains(task)){
                          queue.add(task);
                      }
                  }
              }
              res[idx++] = set.size();
          }
      }
      for(int i=0;i<q;i++){
          System.out.println(res[i]);
      }
    }
    }
#京东笔试##京东##笔经#
全部评论
彼此彼此,ak快乐力尽
点赞 回复 分享
发布于 2021-09-11 21:01

相关推荐

03-11 23:33
已编辑
曲阜师范大学 后端工程师
牛客68808588...:果真开发过12306购票系统吗,这不是一眼就被看穿了
点赞 评论 收藏
分享
今天 08:58
已编辑
门头沟学院 Java
ttl:&nbsp;3.19一面晚上过3.20二面3.23oc3.25offerbase:末9有一段中小厂实习一面面经:(总体时长一个小时二十分钟左右没什么八股,主要都是问项目和场景题1.实习(问了有四十分钟,感觉面试官很看重实习这一块,一直在拷打,问到后面我都要疯了,好在准备得比较充分1️⃣用的是什么中间件,有参与技术选型吗,实习的项目里为什么选这个RabbitMQ而不是kafka,为什么不用RocketMQ,为什么放弃异步,自己的项目里面使用的是kafka,那你觉得项目和实习的中间件选型有差异的原因是什么,他们之间的区别在哪里,底层的原因知道吗(高柱到这里已经快疯了,但是硬着头皮答完了,主要是从一致性吞吐量和框架的契合度答,面试官说答得挺好的,应该是没什么问题,这一块就问了快半个小时,到这里我已经快疯了2️⃣项目怎么对接上下游3️⃣介绍项目的难点重点4️⃣微服务(高柱实习是单体项目没涉及这一块5️⃣Redis的使用2.项目:1️⃣智能客服是怎么应用在项目里的(langchain4j➕rag➕functioncalling)2️⃣RAG了解多少3️⃣文本向量化的难点是什么,了解哪些大模型的知识(我一点不懂,纯瞎扯,但貌似扯对了4️⃣对ai的态度是什么,aicoding相关5️⃣怎么保证多节点下Caffeine缓存里面数据都是一致的(答的是短ttl,面试官不是很满意,但是我确实不太懂这个怎么保证,后来查了还是不懂怎么保证6️⃣Redis的使用,和你的实习项目的使用有区别吗,还有一些引申问题3.八股(含量不高,就是走个过场1️⃣进程的内存布局2️⃣Redis三剑客3️⃣微服务相关知识(高柱已经忘得差不多了…勉强答上来4️⃣JVM5️⃣线程状态6️⃣线程安全,在你的实习项目里怎么保证线程安全的(又绕回来了4.智商题找异常球5.手撕:1️⃣五道sql,不难2️⃣力扣不重叠的滑动窗口数组,贪心➕双指针秒了强度拉满了这个一面,高柱到后面人都是傻的二面面经:(就半个小时实习拷打,简历上写了几点就问了几点,问完就结束了,无手撕
查看19道真题和解析
点赞 评论 收藏
分享
评论
点赞
9
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务