首页 > 编程语言 >三种语言实现双指针判断子序列(C++/Python/Java)

三种语言实现双指针判断子序列(C++/Python/Java)

时间:2024-08-01 11:30:13浏览次数:15  
标签:Java Python C++ a1 int 序列 print Yes 整数

题目

给定一个长度为 n 的整数序列 a1,a2,…,an 以及一个长度为 m 的整数序列 b1,b2,…,bm。

请你判断 a 序列是否为 b 序列的子序列。

子序列指序列的一部分项按原有次序排列而得的序列,例如序列 {a1,a3,a5} 是序列 {a1,a2,a3,a4,a5} 的一个子序列。

输入格式

第一行包含两个整数 n,m。

第二行包含 n 个整数,表示 a1,a2,…,an。

第三行包含 m 个整数,表示 b1,b2,…,bm。

输出格式

如果 a 序列是 b 序列的子序列,输出一行 Yes

否则,输出 No

数据范围

1≤n≤m≤1e5,
−1e9≤ai,bi≤1e9

输入样例:

3 5
1 3 5
1 2 3 4 5

输出样例:

Yes

C++

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5;
int a[N], b[N];

int main()
{
    int n,m;
    cin >> n >> m;
    for(int i = 1; i <= n; i++)
        cin >> a[i];
    for(int i = 1; i <= m; i++)
        cin >> b[i];
    int i = 1, j = 1;
    for(; i <= n && j <= m; j++)
    {
        while(i <= n && j <= m && a[i] != b[j])
            j++;
        if(i <= n && j <= m && a[i] == b[j])
            i++;
    }
    if(i > n)
        cout << "Yes";
    else
        cout << "No";
}

Python

n, m = map(int, input().split())
 
a = list(map(int, input().split()))
b = [int(x) for x in input().split()]
 
i = 0
j = 0
 
while i < n and j < m:
    while i < n and j < m and a[i] != b[j]:
        j += 1
    if i < n and j < m and a[i] == b[j]:
        i += 1
    j += 1

if i >= n:
    print("Yes")
else:
    print("No")

Java

import java.util.*;
 
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int m = sc.nextInt();
        int[] a = new int[n+1];
        int[] b = new int[m+1];
        for(int i = 1; i <= n; i++)
            a[i] = sc.nextInt();
        for(int i = 1; i <= m; i++)
            b[i] = sc.nextInt();
        int i = 1, j = 1;
        for(; i <= n && j <= m; j++)
        {
            while(i <= n && j <= m && a[i] != b[j])
                j++;
            if(i <= n && j <= m && a[i] == b[j])
                i++;
        }
        if(i > n)
            System.out.print("Yes");
        else
            System.out.print("No");
    }
}

标签:Java,Python,C++,a1,int,序列,print,Yes,整数
From: https://www.cnblogs.com/fang0218/p/18336303

相关文章

  • java笔记2
    4.数组笔记数组概念数组是一种基本的数据结构,用于存储固定大小的相同类型的元素序列。在Java中,数组是一种对象,它实现了java.lang.Cloneable和java.io.Serializable接口。声明数组:int[]intArray;初始化数组:intArray=newint[10];//创建一个长度为10的整型数组......
  • C++竞赛初阶L1-05-第四单元-判断语句(第19课)100003: 最大数输出
    题目内容输入三个整数,输出最大的数。输入格式输入为一行,包含三个整数,数与数之间以一个空格分开。输出格式输出一行,包含一个整数,即最大的整数。样例1输入102056样例1输出56程序代码输出:#include<bits/stdc++.h>usingnamespacestd;intmain(){ inta,b,c......
  • C++程序中的类型转换与进程异常退出血案复盘
    在C++编程中,类型转换是一个常见的操作,它允许程序员将一个数据类型转换为另一个数据类型。然而,不恰当的类型转换可能会导致未定义的行为,甚至引发进程异常退出。本文将深入分析一段C++代码,探讨其中由于类型转换不当导致的潜在问题,并解释为何这种类型转换可能引发进程异常退出......
  • 【计算机毕业设计】ssm398基于javaweb的酒店预订管理系统+vue
    使用旧方法对酒店预订信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在酒店预订信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的酒店预订管理系统管理员功能有个人中心,用户管理,房间类型管......
  • Java初识
    JDK、JRE和JVM​1.JDK指的是JavaDevelopmentKit,它是一个开发Java应用程序所需的软件开发工具包。JDK包括Java编译器、Java虚拟机、Java类库等必要组件,以及用于开发、调试和运行Java应用程序的其他工具。使用JDK可以帮助开发人员编写、测试和部署Java应用程序,以及运行Java应......
  • 三种语言实现双指针解决数组元素的目标和(C++/Python/Java)
    题目给定两个升序排序的有序数组A和B,以及一个目标值x。数组下标从0开始。请你求出满足A[i]+B[j]=x的数对(i,j)。数据保证有唯一解。输入格式第一行包含三个整数n,m,x,分别表示A的长度,B的长度以及目标值x。第二行包含n个整数,表示数组A。第三行包含m个整数......
  • C++对象析构顺序问题——由QObject::desroyed展开的思考
    C++对象析构顺序问题——由QObject::desroyed展开的思考C++析构函数执行的顺序是最先执行继承链最末端的子类的,最后执行顶层的基类的。而QObject::destroyed(QObject*obj=nullptr)信号在Qt文档中说是“在obj被完全析构时之前立即触发,并且不会被阻塞”。这里的“完全析......
  • JavaScript入门须知
    一、JavaScript概念1.javascript是一门跨平台,面向对象的脚本语言,用来控制网页行为,可使网页交互2.java和js完全不一样,无论是概念还是设计都是完全不一样的,但是它们的基础语法相似。3.在1995年由BrendanErich发明,于1997年成为ECMA的标准4.ECMA欧洲协会标准,ECMAScript(ES6)是......
  • Java I/O的进化:从I/O到NIO
    引言JavaI/O(Input/Output)是Java程序中处理输入和输出的基本方式,包括文件操作、网络通信等。随着Java平台的发展,JavaNIO(NewInput/Output)作为JavaI/O的一个重要补充,提供了更为高效和灵活的I/O操作方式。本文将深入讲解JavaI/O模型、NIO的原理,以及如何在实际应用中使用N......
  • Java反射机制及其应用
    Java反射机制及其应用引言Java反射机制是Java语言的一项强大特性,它允许程序在运行时查询、访问和修改类、接口、方法、构造函数等的属性和行为。反射机制在动态代理、框架开发、依赖注入等领域有着广泛的应用。本文将介绍反射的基本概念、如何使用反射,以及反射在动态代理......