【备战秋招】每日一题:5月13日美团春招:题面+题目思路 + C++/python/js/Go/java带注释

news2024/10/6 8:41:00

2023大厂笔试模拟练习网站(含题解)
www.codefun2000.com
最近我们一直在将收集到的各种大厂笔试的解题思路还原成题目并制作数据,挂载到我们的OJ上,供大家学习交流,体会笔试难度。现已录入200+道互联网大厂模拟练习题,还在极速更新中。欢迎关注公众号“塔子哥学算法”获取最新消息。

提交链接: 

https://codefun2000.com/p/P1138

为了更好的阅读体检,可以查看OJ上的题解。进入提交链接,点击右边菜单栏的"查看塔子哥的题解"

在线评测链接:P1289

题目描述

塔子哥在海边建了一个沙堡乐园。

里面有一个巨大的沙堡,塔子哥每年都会增加这个沙堡的层数,但也有一定的规律:

1、沙堡底层序号为 1 ;

2、沙堡的任何一个部分每年最多只能增加一个小沙堡(也可能不增加) ;

3、新建的小沙堡一定是独立的,没有和其他小沙堡连接(除了父亲沙堡);

现在塔子哥准备了今年沙堡的示意图和明年沙堡的设计图,他想让你告诉他,第一座沙堡明年能否变成第二座沙堡。

输入描述

输入第一行为 T ,表示 T 组数据。( 1≤T≤10 )

对于每一组数据,包含4行:

第一行是第一座沙堡的个数:n ,第二行有 n-1 个数字l_i(i=2,3,...,n) 表示第 i 个沙堡的是建在第 l_i(i=2,3,...,n) 个沙堡上的。

第三行是第二座沙堡的个数:m ,第四行有 m-1 个数字 r_i(i=2,3,...,n) 表示第 i 个沙堡是建在第 r_i(i=2,3,...,n)个沙堡上的。

(1\leq n,m\leq 50000,1\leq l_i,r_i\leq i)

输入保证两座沙堡的对应序号相同,即两座沙堡的共有点的父节点相同,且第二座包括第一座的所有节点。

输出描述

如果第一座明年有可能建成第二座,输出“yes”,否则输出”no”.

样例

输入

1
5
1 1 1 4
8
1 1 1 4 5 1 4

输出

yes

思路

模拟 + 排序

题目保证两座沙堡的对应序号相同。故前 n 个沙堡无需考虑是否相同的问题。

从明天的第 n + 1 个沙堡开始,为新增的沙堡,这块的沙堡要满足,所有沙堡的父亲沙堡编号都各不相同,所以沙堡的父亲编号都小于等于 n ,因为大于 n 的编号均为明天新增的小沙堡,其不可能作为其他沙堡的父亲沙堡。

为了方便判断是否有两个新增沙堡的父亲沙堡相同,将所有的新增沙堡按其父亲沙堡编号排序,如果两个沙堡的父亲沙堡编号相同,这两个沙堡在排序后必然相邻。

时间复杂度:O(n\log n) 排序的复杂度,因为合法的 m 最多是 2n

类似题目推荐

推荐几道排序相关的题目

LeetCode

1.合并两个有序数组

2.最大间距

Codefun2000

  1. P1048. 华东师范大学保研机试-2022-整数排序

  2. P1281 中国光大银行 2023.05.13-春招-第一题-泡泡排序

  3. P1173 京东 2023.04.08-春招-第三题-构造排列

  4. P1014 美团 2022.10.8-塔子玩游戏

代码

CPP

#include <bits/stdc++.h>
using namespace std;
​
void solve() {
    int n;
    cin >> n;
    vector<int> A;
    // 今天的沙堡
    for (int i = 1; i < n; ++i) {
        int j; cin >> j;
        j -= 1;
        A.emplace_back(j);
    }
​
    int m;
    cin >> m;
    vector<int> B;
    // 明天的沙堡
    for (int i = 1; i < m; ++i) {
        int j; cin >> j;
        j -= 1;
        B.emplace_back(j);
    }
​
    // 今天的沙堡数量必然小于等于明天的沙堡数量
    if (n > m) {
        cout << "no\n";
        return;
    }
​
    // 新增的沙堡的父亲沙堡编号全都是 < n 的,且新增的沙堡的父亲沙堡编号不能相同(每天一个沙堡只能新增一个小沙堡)
    // 将新增的沙堡的父亲编号排序,那么相同的父亲沙堡编号必然相邻
    sort(B.begin() + n - 1, B.end());
    for (int i = n - 1; i < B.size(); ++i) {
        if (B[i] >= n) {
            cout << "no\n";
            return;
        }
        if (i >= n && B[i] == B[i - 1]) {
            cout << "no\n";
            return;
        }
    }
​
    cout << "yes\n";
}
​
int main()
{
    int T = 1;
    cin >> T;
    while (T--) solve();
​
    return 0;
}

python

def solve():
    n = int(input())
    A = list(map(int, input().split()))
    # 今天的沙堡
    for i in range(n - 1):
        A[i] -= 1
​
    m = int(input())
    B = list(map(int, input().split()))
    # 明天的沙堡
    for i in range(m - 1):
        B[i] -= 1
​
    # 今天的沙堡数量必然小于等于明天的沙堡数量
    if n > m:
        print("no")
        return
​
    # 新增的沙堡的父亲沙堡编号全都是 < n 的,且新增的沙堡的父亲沙堡编号不能相同(每天一个沙堡只能新增一个小沙堡)
    # 将新增的沙堡的父亲编号排序,那么相同的父亲沙堡编号必然相邻
    B[n - 1:] = sorted(B[n - 1:])
    for i in range(n - 1, len(B)):
        if B[i] >= n:
            print("no")
            return
        if i >= n and B[i] == B[i - 1]:
            print("no")
            return
​
    print("yes")
​
​
T = int(input())
for _ in range(T):
    solve()
​

Java

import java.util.*;
​
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        while (T-- > 0) {
            solve(sc);
        }
    }
​
    public static void solve(Scanner sc) {
        int n = sc.nextInt();
        List<Integer> A = new ArrayList<>();
        // 今天的沙堡
        for (int i = 1; i < n; ++i) {
            int j = sc.nextInt() - 1;
            A.add(j);
        }
​
        int m = sc.nextInt();
        List<Integer> B = new ArrayList<>();
        // 明天的沙堡
        for (int i = 1; i < m; ++i) {
            int j = sc.nextInt() - 1;
            B.add(j);
        }
​
        // 今天的沙堡数量必然小于等于明天的沙堡数量
        if (n > m) {
            System.out.println("no");
            return;
        }
​
        // 新增的沙堡的父亲沙堡编号全都是 < n 的,
        // 且新增的沙堡的父亲沙堡编号不能相同(每天一个沙堡只能新增一个小沙堡)
        // 将新增的沙堡的父亲编号排序,那么相同的父亲沙堡编号必然相邻
        Collections.sort(B.subList(n - 1, B.size()));
        for (int i = n - 1; i < B.size(); ++i) {
            if (B.get(i) >= n) {
                System.out.println("no");
                return;
            }
            if (i >= n && B.get(i).equals(B.get(i - 1))) {
                System.out.println("no");
                return;
            }
        }
​
        System.out.println("yes");
    }
}

Go

package main
​
import (
    "bufio"
    "fmt"
    "os"
    "sort"
    "strconv"
)
​
func solve(scanner *bufio.Scanner) {
    n := nextInt(scanner)
    A := make([]int, n-1)
    // 今天的沙堡
    for i := 0; i < n-1; i++ {
        A[i] = nextInt(scanner) - 1
    }
​
    m := nextInt(scanner)
    B := make([]int, m-1)
    // 明天的沙堡
    for i := 0; i < m-1; i++ {
        B[i] = nextInt(scanner) - 1
    }
​
    // 今天的沙堡数量必然小于等于明天的沙堡数量
    if n > m {
        fmt.Println("no")
        return
    }
​
    // 新增的沙堡的父亲沙堡编号全都是 < n 的,
    // 且新增的沙堡的父亲沙堡编号不能相同(每天一个沙堡只能新增一个小沙堡)
    // 将新增的沙堡的父亲编号排序,那么相同的父亲沙堡编号必然相邻
    sort.Ints(B[n-1:])
    for i := n - 1; i < len(B); i++ {
        if B[i] >= n {
            fmt.Println("no")
            return
        }
        if i >= n && B[i] == B[i-1] {
            fmt.Println("no")
            return
        }
    }
​
    fmt.Println("yes")
}
​
func nextInt(scanner *bufio.Scanner) int {
    scanner.Scan()
    n, _ := strconv.Atoi(scanner.Text())
    return n
}
​
func main() {
    scanner := bufio.NewScanner(os.Stdin)
    scanner.Split(bufio.ScanWords)
​
    T := nextInt(scanner)
    for i := 0; i < T; i++ {
        solve(scanner)
    }
}

Js

process.stdin.resume();
process.stdin.setEncoding('utf-8');
let input = '';
process.stdin.on('data', (data) => {
    input += data;
    return;
});
process.stdin.on('end', () => {
    const lines = input.trim().split('\n');
    let T = parseInt(lines[0]);
    let index = 1;
    while (T--) {
        let n = parseInt(lines[index++]);
        let A = lines[index++].split(' ').map(x => parseInt(x));
        // 今天的沙堡
        for (let i = 0; i < n-1; ++i) {
            A[i] -= 1;
        }
​
        let m = parseInt(lines[index++]);
        let B = lines[index++].split(' ').map(x => parseInt(x));
        // 明天的沙堡
        for (let i = 0; i < m-1; ++i) {
            B[i] -= 1;
        }
​
        // 今天的沙堡数量必然小于等于明天的沙堡数量
        if (n > m) {
            console.log("no");
            continue;
        }
​
        let is_no = false; 
​
        // 新增的沙堡的父亲沙堡编号全都是 < n 的,
        // 且新增的沙堡的父亲沙堡编号不能相同(每天一个沙堡只能新增一个小沙堡)
        // 将新增的沙堡的父亲编号排序,那么相同的父亲沙堡编号必然相邻
        B.slice(n - 1).sort((a, b) => a - b);
        for (let i = n - 1; i < B.length; ++i) {
            if (B[i] >= n) {
                console.log("no");
                is_no = true;
                break;
            }
            if (i >= n && B[i] === B[i - 1]) {
                console.log("no");
                is_no = true;
                break;
            }
        }
        if (!is_no) console.log("yes");
    }
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/648726.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

macOS降级,从 Ventura 13.0至Monterey 12.6.1,适用于m芯片电脑

Mac资源&#xff1a;macw 准备工作&#xff1a; 请确保已经备份Mac上的重要资料&#xff0c;我当时将重要资料保存在了iCloud&#xff0c;你也可以将资料备份到其他地方&#xff0c;anyway。 将对应文件夹拖进iCloud Drive&#xff0c;等待其完成上传 准备一个外置存储器&am…

【机器学习】十大算法之一 “K-means”

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

第六章 彩色图像处理

第六章 彩色图像处理 6.1彩色基础 颜色特性&#xff1a; 亮度&#xff1a;表达了无色的强度概念色调&#xff1a;光波混合中与波长有关的属性&#xff08;即颜色&#xff09;饱和度&#xff1a;即相对纯净度&#xff0c;或一种颜色混合白光的数量。饱和度与所加白光成反比 …

tf卡和sd卡引脚定义和性能指标

sd卡和tf卡的引脚定义和引脚对应关系&#xff0c;见下图 tf卡的性能 选择tf卡时&#xff0c;我们主要是考虑下边几个性能&#xff0c;这几个性能一般都是可以直接看内存卡看出来的。 注&#xff1a;只介绍通过卡的标识来判断性能&#xff0c;卡的真假自己识别&#xff0c;不考…

踩坑笔记 Spring websocket并发发送消息异常

文章目录 示例代码WebSocketConfig配置代码握手拦截器代码业务处理器代码 问题复现原因分析解决方案方案一 加锁同步发送方案二 使用ConcurrentWebSocketSessionDecorator方案三 自研事件驱动队列&#xff08;借鉴 Tomcat&#xff09; 总结 今天刚刚经历了一个坑&#xff0c;非…

Linux系统基础知识与自学方法

大部分非计算机相关的朋友也经常使用电脑&#xff0c;所以我们频繁接触的是Windows系统。关于这个系统的评价不一&#xff0c;一部分人觉得简洁快捷&#xff0c;一部分人觉得问题&#xff08;病毒、弹窗&#xff09;多多&#xff0c;总之对Windows系统系统的评价参差不齐&#…

案例精述 | FortiEDR双活终端安全方案护航金融多云多分支场景

金融行业多云、多分支等特点&#xff0c;在数字化时代迎来更多安全挑战。尤其在勒索软件等威胁猖獗的大背景下&#xff0c;“安全运营”理念要求金融企业不仅要对威胁攻击“知其然”&#xff0c;还要“知其所以然”。因此&#xff0c;某金融企业希望提升端点安全防护&#xff0…

样本文件的使用方法以及注意事项

经常使用CHS零壹视频系列的朋友们应该对“样本文件”不陌生&#xff0c;在各种案例中我们也强烈建议在视频扫描时加载样本文件&#xff0c;而在视频修复时则样本文件成了必选项。今天我们来聊聊样本文件的作用和使用要求。 什么是样本文件&#xff1f; 从数据恢复广义的角度讲…

分布式文件系统HDFS

分布式文件系统HDFS 分布式文件系统计算机集群结构分布式文件系统的结构分布式文件系统的设计需求 HDFS简介HDFS相关概念块HDFS总体框架HDFS Client名称节点和数据节点名称节点数据节点 第二名称节点HDFS存在的问题 HDFS体系结构HDFS体系结构概述HDFS命名空间管理通信协议客户端…

Python高级系列教程:Python的进程和线程

学习目标 1、了解多任务的概念 2、了解进程的概念以及多进程的作用 3、掌握多进程完成多任务的工作原理及案例编写 4、掌握进程编号的获取方式以及进程使用的注意事项 5、了解线程的概念以及多线程的作用 6、掌握多进程完成多任务的工作原理及案例编写 一、多任务的概念 …

微服务 springcloud 05 hystrix框架,降级,可视化Hystrix dashboard 仪表盘,熔断

01.微服务宕机时&#xff0c;ribbon 无法转发请求 关闭 user-service 和 order-service 02.hystrix框架 03.创建hystrix项目&#xff0c;hystrix与ribbon经常一起出现 第一步&#xff1a;复制 sp06-ribbon 项目&#xff0c;命名为sp07-hystrix 选择 sp06-ribbon 项目&#…

一个Java程序员的C++学习之路

最近接到了一个Windows客户端开发&#xff0c;需要用到C&#xff0c;由于大学嵌入式学习的时候用到了这种东西&#xff0c;虽然没忘记吧&#xff0c;但是还是打算用一周的时间复习一下&#xff0c;下面是我的复习笔记&#xff0c;当然了&#xff0c;也是基于尚硅谷和黑马的笔记…

NLP——Ethics伦理

文章目录 Core NLP ethics conceptsbiasprivacy Group discussionAutomatic Prison Term PredictionAutomatic CV ProcessingLanguage Community Classification Core NLP ethics concepts 自然语言处理&#xff08;NLP&#xff09;的伦理问题是一个日益重要的领域&#xff0c…

007、体系架构之PD

PD PD架构主要功能路由功能 TSO分配TSO概念分配过程时间窗口同步过程 调度总流程信息收集调度的实现调度需求生成调度执行调度调度的基本操作调度的策略 lablelabel与高可用label的配置 PD架构 PD&#xff1a;有高可用和强一致性。 也有leader。使用奇数的节点数量。它需要存储…

10 分钟理解微服务、容器和 Kubernetes及其关系

什么是微服务&#xff1f; 什么是微服务&#xff1f;你应该使用微服务吗&#xff1f;微服务与容器和 Kubernetes 有什么关系&#xff1f;如果这些事情在您的日常生活中不断出现&#xff0c;并且您需要在 10 分钟内进行概述&#xff0c;那么这篇博文适合您。 从根本上讲&#x…

小红书企业号限流原因有哪些,限流因素

作为企业、品牌在小红书都有官方账号&#xff0c;很多人将注册小红书企业号看作是获取品牌宣推“特权”的必行之举。事实真的如此吗&#xff0c;那为什么小红书企业号限流频发&#xff0c;小红书企业号限流原因有哪些&#xff0c;限流因素。 一、小红书企业号限流真的存在吗 首…

SpringBoot中Redis的基础使用

基础使用 首先引入依赖 <!-- redis依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</g…

中断处理流程以及程序状态寄存器CPSR的本质

文章目录 前言一、当前程序状态寄存器&#xff08;CPSR&#xff09;二、异常的分类2.1 7个异常源2.2 异常的优先级2.3 为什么FIQ比IRQ快&#xff1f;2.4 异常与工作模式的区别 三、异常的处理流程3.1 异常处理机制3.2 进入异常处理流程&#xff1a;3.3 退出异常的处理流程&…

送给蓝初小萌新系列(1)——Linux入侵排查

一、linux系统资源 1、linux被入侵的症状 linux系统资源用户和日志文件和命令篡改启动项和定时任务挖矿脚本分析 2、linux系统资源 2.1、CPU内存磁盘 top -c -o %CPU:查看cpu占用情况&#xff08;按cpu排序&#xff09; top -c -o %MEM:查看内存占用情况&#xff08;按内存…

兼容性测试如何提高网站的可用性?

兼容性测试如何提高网站的可用性? 在现代社会&#xff0c;网站已经成为了人们获取信息、进行交流的主要渠道之一。但是&#xff0c;在网站的设计和开发中&#xff0c;往往会存在兼容性问题&#xff0c;导致不同浏览器或设备的用户无法顺利地访问和使用网站&#xff0c;降低了网…