首页 > 编程语言 >【面试经验】2024年9月滴滴后端笔试 java

【面试经验】2024年9月滴滴后端笔试 java

时间:2024-09-18 21:51:29浏览次数:13  
标签:java int 滴滴 System pos 2024 println sc new

比较简单,两题编程。

选择题好像是 20 题,有部分不确定,有 C++的几题。

题目记不清了,凭印象写一下。

编程题
第一题 充电
第一题:n个玩具,m 电量,尽可能让一个大的区间内的玩具的电量充满。输出充满电的玩具个数 。

双指针+滑动窗口。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        new Main().run();
    }

 // n个玩具,m 电量,尽可能让一个大的区间内的玩具的电量充满。既然是连续的,那直接维护m即可。如果电量不足,则排出头部元素,补充电量。

    public void run(){
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        long m = sc.nextLong();
        int[] charge = new int[n];
        for(int i = 0; i < n; i++) charge[i] = sc.nextInt();

        // 双指针
        int ans = 0;
        int idx = 0;  // 头部元素
        for(int i = 0; i < n; i++){

            while(m < charge[i]){
                m += charge[idx++];
            }

            if(m >= charge[i]){
                m -= charge[i];
            }

            ans = Math.max(ans, i - idx + 1);
        }
        System.out.println(ans);
    }
}

第二题 变化排行榜
题意:有一个排行榜,长度是 n,然后现在可以接收 n 个 op,如果是 1 则需要调低这首歌的位置,如果是 0 则不变,如果是 -1 则需要调高这个歌的位置。如果有冲突则不行,输出 NO,否则输出 YES。

可能是样例比较弱,有些情况没考虑也过了。写的丑了点,还能优化其实。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        new Main().run();
    }
    Scanner sc = new Scanner(System.in);
    public void run(){
        int T = sc.nextInt();
        while(T --> 0){
            solve();
        }
    }

    // 有一个排行榜,长度是 n,然后现在可以接收 n 个 op,如果是 1 则需要调低这首歌的位置,如果是 0 则不变,如果是-1则需要调高这个歌的位置。
    // 如果有冲突则不行,输出 NO,否则输出 YES
    public void solve() {
        int n = sc.nextInt();

        boolean[] cantMove = new boolean[n + 1];   // 从第一名开始
        List<Integer> up = new ArrayList<>();   // 记录需要调高的位置(即op 为-1
        List<Integer> down = new ArrayList<>();  // 需要调低的,op 为 1

        for(int i = 0; i < n; i++){
            int op = sc.nextInt();
            int pos = sc.nextInt();

            if(op == 1) down.add(pos);
            else if(op == -1) up.add(pos);
            else cantMove[pos] = true;  // 表示不能动了
        }


//        System.out.println(Arrays.toString(cantMove));

        // 还有一点需要注意,如果对于同一首歌有不同的请求,那应该也要输出 NO,存在冲突了。

        // 对于需要上升的歌,需要从最高的位置(从小到大)开始判断存不存在可以调换的歌(前面有可以移动的)。如果存在则说明当前他的位置不用管,然后把那个可以被移动的歌的位置更新为不可动,防止后续判断出错
        up.sort((a, b) -> a - b);
        for(int pos : up){
            boolean flag = false;  // 标记当前数前面是否存在可移动到的位置
            for(int i = 1; i < pos; i++){
                if(!cantMove[i]){
                    // 可以被移动过来
                    cantMove[i] = true;
                    flag = true;
                    break;
                }
            }
            if(!flag) {
                System.out.println("NO");
                return;
            }
        }

//        System.out.println(up);

        // 到达这里说明上升没问题,同理如果需要下降的歌得判断后面的歌是否能被替换
        down.sort((a, b) -> b - a);

        for(int pos : down){
            boolean flag = false;

            // 注意边界,当前位置肯定能放啊,所以不能取 pos
            for(int i = n; i > pos; i--){
                if(!cantMove[i]){
                    cantMove[i] = true;
                    flag = true;
                    break;
                }
            }
            if(!flag) {
                System.out.println("NO");
                return;
            }
        }

//        System.out.println(down);

        // 左右都可以移动,不冲突
        System.out.println("YES");
    }
}

标签:java,int,滴滴,System,pos,2024,println,sc,new
From: https://blog.csdn.net/litterfinger/article/details/142344827

相关文章

  • 1. 如何在Java中连接MySQL数据库?请解释使用JDBC连接的步骤。
    要在Java中连接MySQL数据库,通常使用JDBC(JavaDatabaseConnectivity)API。这是一个用于执行SQL语句的JavaAPI,可以用来访问关系型数据库。下面是使用JDBC连接MySQL数据库的详细步骤:1.添加MySQLJDBC驱动首先,需要确保项目中包含MySQL的JDBC驱动程序。这个驱动程序通常是一个......
  • java list<Map<String,Object>> 转成对应的对象
    将List<Map<String,Object>>转换为对应的对象可以通过反射或手动映射来实现。以下是一个示例,演示如何使用手动映射的方式将List<Map<String,Object>>转换为对象列表。示例代码假设我们有一个简单的对象类User:publicclassUser{privateStringname;privateint......
  • 前端——JavaScript练习 做一个todoList
    用前端制作一个todoList的表格,实现更新、删除、修改等功能。涉及几个知识点:设置最小高度(宽度):.container{min-width:350px;/*最小宽度最小不会小于210px*/} 去掉外轮廓outline:none;去除字符串两端的空白字符(包括空格、制表符、......
  • CINEMA 4D R2024(C4D)下载安装教程
    Cinema4D2024是一款强大的三维软件。CINEMA4DR2024(C4D)下载安装教程其在多方面有显著升级。模拟系统方面,刚体模拟加入统一模拟框架,可与布料、绳索等模拟类型交互;Pyro模拟功能增强,能从粒子等生成火焰且可设置初始状态、缓存及升级。建模工具上,新增图案选择功能、投影变形器......
  • java代码-编译-打包-执行_云原生时代笔记总结
    楔子:可能201几年开发的时候,有个ide,加上打包插件,就可以开发了,测试的时候war包扔到服务器容器里就可以跑起来了。(而且没有做过批处理的小伙伴对jar包执行可能不甚熟悉,只见过web容器的目录结构和lib中的jar包。)但是2015年之后应该是全面进入,云原生时代。大量操作需要linux命令行......
  • 2438.学习周刊-2024年38周
    ✍优秀项目VueTSXAdmin-resume-json-pdfVisActor一个字节出品的前端数据可视化解决方案,分成图表库VChart和表格库VTable[CalendarRemark](CalendarRemark)这个工具可以标记日历,并生成分享图x-crawl一个AI辅助的爬虫库,基于Node.js,抓取网页......
  • 20240918 模拟赛总结
    期望得分:100+100+15=215实际得分:100+25+0=125?????????????????????????????????????不是哥们T1签到题,倒着做二分即可。T2我服了啊,我以为复杂度有点假,可能T掉几个点,结果挂成n^2了,怎么回事呢???第一眼想到的就是CF888G那个异或完全图最小生成树,当时只想了Kruskal的做法,这次也想照搬啊,实现就用了普通线段树+......
  • SMU Autumn 2024 Trial 2
    A.Stand-upComedian只要a不为0,那么由于b和c是相互制约的,比如25106这个样例,讲完两个笑话以后两个人的容量为22,可以选择一个人+1,一个人-1,那么就可进行min(b,c)*2次,进行完后,两个人的容量仍为2,2,最后要看还剩几个笑话可以讲,就是min(a+1,abs(b-c)+d),就是容量很大时可以把笑话全讲完,......
  • java-----Stream流
    什么是Stream?Stream将要处理的元素集合看作一种流,在流的过程中,借助StreamAPI对流中的元素进行操作,比如:筛选、排序、聚合等Stream流的作用:结合了Lambda表达式,简化集合、数组的操作Stream流的使用步骤:    ①先得到一条Stream流(流水线),并把数据放上去  ......
  • [Java基础]Stream流
    当我第一次阅读Java8中的StreamAPI时,说实话,我非常困惑,因为它的名字听起来与JavaI0框架中的InputStream和OutputStream非常类似。但是实际上,它们完全是不同的东西。Java8Stream使用的是函数式编程模式,如同它的名字一样,它可以被用来对集合进行链状流式的操作。本文......