题目理解
这个判断闭合行程主要是根据起点和终点是否是同一个地点,每行输入一段行程(该段的起点和终点),那么我们把每一段闭合行程的第一行的起点记录下来,根据每段行程后面输入的终点进行比较就可以判断是否是一段闭合行程,比如nanjin shanghai;shanghai nanjin;我们把第一段行程nanjin作为起点插入到双端队列的队头,然后shanghai从双端队列队尾,再把shanghai nanjin也从双端队列的队尾插入,这样就可以比较队头和队尾,判断该段行程是否闭合.这段行程闭合就将双端队列清空准备下一段行程的比较.在牛客看到大家提到从shanghai 到shanghai也算是一段闭合行程.但是正常理解他应该不是,可以加一个双端队列的长度比较,长度为2,就是这种情况.
直接上代码吧,代码很容易理解
package meituan;
import java.util.*;
import java.util.Scanner;
public class travel_number {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.print("Enter a travel length:");
int length=sc.nextInt();
//java中nextLine输入会直接按缓冲区读取,消除第一行输入的长度
String xiaochudiyihang_shuru=sc.nextLine();
int count=0;
Deque<String> deq=new LinkedList<String>();
System.out.print("Enter a travel path:");
for(int i=0;i<length;i++) {
String cin_str=sc.nextLine();
String[] StrArry=cin_str.split(" ");
deq.add(StrArry[0]);
deq.add(StrArry[1]);
//System.out.println(deq.getFirst()+" "+deq.getLast());
//java字符串的==比较不是比较内容相同就相等,而是指向对象相等才是,
//如str1=nanjin str2=nanjin str1==str2会返回false,内容相同,但是对象不同,仍然是false
//str1=shanghai str1=shanghai str1==str1 此时才是返回true,不知道为啥这样设计,真垃圾
//Java要用str1.equals(str2)
if(deq.getFirst().equals(deq.getLast())) {
count++;
//当双端队列头部等于尾部时,表示一圈旅行,清空双端队列
deq.clear();
}
}
System.out.println(count);
}
}
运行结果

本文介绍了一道美团笔试题的解决方案,题目要求判断旅行线路是否闭合。通过使用双端队列记录行程起点和终点,实现对每段行程是否形成闭环的判断。代码示例展示了如何读取输入并利用双端队列特性完成判断。

被折叠的 条评论
为什么被折叠?



