0913 滴滴笔试 java

比较简单,两题编程。

选择题好像是 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##软件开发笔面经#
后端开发笔面经 文章被收录于专栏

主要收录一部分我的笔试面试经历文章,欢迎订阅。

全部评论
我第一题用的dp,第二题贪心
点赞 回复 分享
发布于 2024-09-14 07:26 陕西
第一题前缀和加双指针,第二题一开始总感觉像拓扑排序,最后没写了,骗了百分之18
点赞 回复 分享
发布于 2024-09-15 13:01 北京
第二题感觉写复杂了呀,判断第一个-1前面有没有1 && 最后一个1后面有没有-1
点赞 回复 分享
发布于 2024-09-16 11:43 江西

相关推荐

。#牛客AI配图神器#
SpadeKTLSG:感觉,出去走走比闭门造车好
点赞 评论 收藏
分享
03-06 00:30
蚂蚁集团_hr
蚂蚁集团-大安全1.&nbsp;面试总结大安全简直意难平。蚂蚁这边不同部门的流程虽然不能并行推进,但是可以排队,在我面试网商银行的时候,大安全就在排队了,等到网商银行挂掉后,大安全这边立即就开始推进了流程。蚂蚁的技术面试,一般没有邮件通知,都是面试官打电话来约时间,然后到了时间就进行电话沟通,如果要写算法题,面试官会在面试的时候给你发一个链接,然后在链接的系统里面写题。大安全的技术面试和HR面试推进得都还比较顺利,但是HR面试完后,一直没有谈薪,联系HR也只是回复我说流程在推进,最后通过蚂蚁CIO的负责人才了解到,大安全的HC紧张,需要等流程其他候选人走完流程,才可能出结果,我理解这就是泡池子了吧。2.&nbsp;技术一面1.&nbsp;日志框架是怎么在Springboot中集成的2.&nbsp;Log4j2相较于Log4j有什么优势3.&nbsp;如何实现服务之间的链路调用的追踪4.&nbsp;链路追踪如果开启了异步线程则应该怎么传递链路信息5.&nbsp;请设计方案解决打印链路日志时异步线程还未执行结束的问题6.&nbsp;针对Quartz框架会使用到数据库表有做什么优化7.&nbsp;说一下第一份工作里面的分布式调度系统的实现思路8.&nbsp;第一份工作给你的收获有哪些9.&nbsp;MySQL的索引结构是什么10.&nbsp;B树和B+树的区别有哪些11.&nbsp;红黑树是什么12.&nbsp;平衡二叉搜索树是什么13.&nbsp;内存溢出时应该怎么定位14.&nbsp;如果写一个死循环造成内存溢出时该如何定位15.&nbsp;有什么是你擅长的但是还没被问到的16.&nbsp;如果让你实现MyBatis则应该解决哪些难点17.&nbsp;MyBatis如何处理事务的18.&nbsp;MyBatis集成到Spring后的事务处理的核心要点是什么面试时间大概在90分钟左右,面试官人很Nice,不会的知识点会给到一定的提示,实在不会的会安慰说没关系,回答得好的会进行鼓励,作为应聘者,感受真的非常好。在一天后约了二面3.&nbsp;技术二面1.&nbsp;项目问题2.&nbsp;如何设计一个TraceId生成算法3.&nbsp;(算法题)Leetcode&nbsp;1.&nbsp;两数相加面试时间大概在50分钟左右,面试官是一个女面试官,也是很Nice,没有问八股,就是基于项目展开讨论,对其中一些技术细节会问得比较深。在二面的反问环节,我向二面面试官提到当前我有其他的流程正在推进,希望大安全这边的流程可以推进快一点,当晚三面面试官就打电话和我约了三面的时间,还说是二面面试官催他打的电话,感觉挺有意思的。当晚约了三面4.&nbsp;技术三面三面也是围绕项目展开讨论,没有问八股,也没有刷题。三面面试官很早之前在淘宝工作过,向我介绍了一下他们当时如何应对三高场景以及一些解决方案,最后还向我介绍了安全相关的业务以及如何理解安全。还有一个插曲,在我三面结束后,之前帮我推进流程的招聘专员在微信上问我面试感觉怎么样,我问他为什么知道我刚面试完,他说面试官就在他旁边,哈哈哈。5.&nbsp;HR面试HR面试和三面中间隔了比较久,这里其实有一个比较扯的插曲,就是本来之前已经约好了HR的面试时间,结果在约定好的面试时间过了10分钟后,HR面试官还是没上线,联系了邮件里面的HR后,才知道HR面试官被领导拉去做绩效谈话了,面试取消,另约时间,也是有点扯了。HR面试的内容就是询问为什么离职,个人绩效和组内分工,但是面试官全程都不太高兴的样子,就最后结束的时候勉强笑了一下,当时其实就感觉不太妙,最后确实如我所料,不太妙。#内推##大数据##蚂蚁集团##实习##数据##春招#内推链接:https://hrrecommend.antgroup.com/job-list.html?code=5JDZa%2FTPHl2AFRHjpsEEAvD9aiqvyzp2Up0Poj4fmhc%3D
蚂蚁集团
|
校招
|
超多精选岗位
点赞 评论 收藏
分享
评论
5
9
分享

创作者周榜

更多
牛客网
牛客企业服务