大疆0813秋招笔试真题解析
- 2026-11-02 23:58:36
关注我们,每周更新两到三次大厂最新笔试题解析
前言
题目比较简单,区分度不大。大家争取都AK吧~
DJI-排序遍历
时间限制: 3000MS内存限制: 589824KB
题目描述:
给定一个矩形田地,其高度为 h 且宽度为 w。同时,你将获得两个整数数组 horizontalCutting 和 verticalCutting,其中 horizontalCutting[i] 表示从矩形田地顶部到第 i 个水平切口的距离,verticalCutting[j] 表示从矩形田地的左侧到第 j 个竖直切口的距离。你的任务是根据提供的 horizontalCutting 和 verticalCutting 数组,进行水平和竖直位置的切割,并找出面积最大的那份田地,并返回其面积。
输入描述
第一行 h:田地的水平最大高度
第二行 w: 田地的垂直最大宽度
第三行:horizontalCutting数组的长度
第四行:horizontalCutting切割水平线的位置
第五行:verticalCutting数组的长度
第六行:verticalCutting切割垂直线的位置

输出描述
输出一个整数代表切割后 面积最大 的田地大小
样例输入
5
4
3
1 2 4
2
1 3
样例输出
4
提示
2 <= h, w <= 1091 <= horizontalCutting.length <= min(h - 1, 105)1 <= verticalCutting.length <= min(w - 1, 105)1 <= horizontalCutting[i] < h1 <= verticalCutting[i] < w题目数据保证 horizontalCutting 中的所有元素各不相同题目数据保证 verticalCutting 中的所有元素各不相同
思路与代码
模拟题。
找到水平位置相邻且相隔最大的两条边 maxW,同理找到处置位置相邻且相隔最大的两条边maxH,相乘即可获得答案。
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;
class Solution {
/* Write Code Here */
public int maxArea(int h, int w, int[] horizontalCuts, int[] verticalCuts) {
Arrays.sort(horizontalCuts);
Arrays.sort(verticalCuts);
int ans = 0;
int maxH = horizontalCuts[0],maxW = verticalCuts[0];
for (int i = 0; i < horizontalCuts.length - 1; i++) {
maxH = Math.max(maxH, horizontalCuts[i+1] - horizontalCuts[i]);
}
maxH = Math.max(maxH, h - horizontalCuts[horizontalCuts.length - 1]);
for (int i = 0 ; i < verticalCuts.length - 1 ; i++) {
maxW = Math.max(maxW, verticalCuts[i+1] - verticalCuts[i]);
}
maxW = Math.max(maxW, w - verticalCuts[verticalCuts.length - 1]);
return maxH * maxW;
}
}
public class Main {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int res;
int h;
h = Integer.parseInt(in.nextLine().trim());
int w;
w = Integer.parseInt(in.nextLine().trim());
int horizontalCuts_size = 0;
horizontalCuts_size = in.nextInt();
int[] horizontalCuts = new int[horizontalCuts_size];
for(int horizontalCuts_i = 0; horizontalCuts_i < horizontalCuts_size; horizontalCuts_i++) {
horizontalCuts[horizontalCuts_i] = in.nextInt();
}
if(in.hasNextLine()) {
in.nextLine();
}
int verticalCuts_size = 0;
verticalCuts_size = in.nextInt();
int[] verticalCuts = new int[verticalCuts_size];
for(int verticalCuts_i = 0; verticalCuts_i < verticalCuts_size; verticalCuts_i++) {
verticalCuts[verticalCuts_i] = in.nextInt();
}
if(in.hasNextLine()) {
in.nextLine();
}
res = new Solution().maxArea(h, w, horizontalCuts, verticalCuts);
System.out.println(String.valueOf(res));
}
}
DJI-链表合并
时间限制: 3000MS内存限制: 589824KB
题目描述:
现在有一个链表数组,每个链表内都已经是升序的排序现在请你将所有的链表进行合并,返回合并后的升序链表
输入描述
说明:
一共 n + 1行数据
第1行:一共有 n 个链表
第 2~ n+1 行:所有的链表
示例:
3
1 4 5 1 3 4 2 6
示例解释:
第一行:一共有三组链表
第二行:第一组链表:1->4->5
第三行:第二组链表:1->3->4
第四行:第三组链表:2->6
输出描述
输出:
链表的所有元素
1 1 2 3 4 4 5 6
样例输入
3
1 4 5
1 3 4
2 6
样例输出
1 1 2 3 4 4 5 6
思路与代码
优先队列模拟。
ACM模式考链表题确实不多见,直接放入一个list放入排序也可以AK的,只不过可能面试的时候看到你的代码就印象不好了,还是老老实实用链表的方式来做。
import java.util.*;
class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
class Main {
public static void main(String []a ) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
ListNode[] lists = new ListNode[n];
sc.nextLine();
for (int i = 0 ; i < n ; i++) {
String[] lines = sc.nextLine().split(" ");
ListNode dummy = new ListNode(-1);
ListNode cur = new ListNode(Integer.parseInt(lines[0]));
dummy.next = cur;
for (int j = 1; j < lines.length; j++) {
cur.next = new ListNode(Integer.parseInt(lines[j]));
cur = cur.next;
}
lists[i] = dummy.next;
}
ListNode res = mergeKLists(lists);
while (res != null) {
System.out.print(res.val + " ");
res = res.next;
}
}
public static ListNode mergeKLists(ListNode[] lists) {
if (lists == null || lists.length == 0) return null;
PriorityQueue<ListNode> queue = new PriorityQueue<>((a,b)->a.val - b.val);
ListNode dummy = new ListNode(0);
ListNode p = dummy;
for (ListNode node : lists) {
if (node != null) queue.add(node);
}
while (!queue.isEmpty()) {
p.next = queue.poll();
p = p.next;
if (p.next != null) queue.add(p.next);
}
return dummy.next;
}
}最后插一下我们的进阶一对一辅导啦
我们是一个针对技术岗(前后端开发、测试、测开、大数据开发)校招一对一进阶提高的工作室。我们从2020年2月份开始,迄今整整三年的时间,带领300+学员斩获1500+大厂offer,参加活动的同学人均5个中大厂offer以上,以下是我们活动内容的介绍! 万诺coding
我们主要是针对有一定基础的同学提供一对一笔试和面试辅导,针对每个同学不同的情况定制内容,包括但不限于“数据结构与算法”/“计算机基础知识”/“项目梳理”/“面试技巧”/“面试复盘”等内容。
摸底测试:如果有兴趣深入了解我们的活动,需要先参加我们的“摸底测试”(类似面试),方便我们了解你的具体情况(主要是code能力和计算机素养),定制出相应的辅导计划。同时这也是一个双向筛选的过程,如果基础过差的同学,抱歉我们可能无法辅导(基础过差的同学一对一辅导成本过高,对双方都不适合);摸底测试通过的同学,我们会定制化一个针对性的提高计划。然后你再考虑是否参加我们的活动。
承诺保offer:通过摸底测试后,我们会针对每个同学的情况给定一个“保offer”计划。然后同学可以根据自己的实际情况考虑参不参加我们的活动。
有兴趣的同学可以扫码添加我们的微信(whynotlab)