博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA代码—算法基础:重建行程
阅读量:4041 次
发布时间:2019-05-24

本文共 2970 字,大约阅读时间需要 9 分钟。

重建行程

问题描述:

给出一组代表从出发到到达的机票(From,To),重新建立形成顺序。

所有的机票都是属于一个从JFK出发的,所以行程必须从JFK开始。

注意:如果有多个有效的行程,你应该返回的行程,具有最小的词汇顺序当读为一个字符串。

例如:行程[“JFK”, “LGA”] 比行程 [“JFK”, “LGB”]具有最小的字典词汇顺序。

所有机场由三个大写字母(IATA代码)表示。
你可以假设所有的票至少有一个有效的行程表。

例子 1:

tickets = [[“MUC”, “LHR”], [“JFK”, “MUC”], [“SFO”, “SJC”], [“LHR”, “SFO”]]
返回: [“JFK”, “MUC”, “LHR”, “SFO”, “SJC”].

例子 2:

tickets = [[“JFK”,”SFO”],[“JFK”,”ATL”],[“SFO”,”ATL”],[“ATL”,”JFK”],[“ATL”,”SFO”]]
返回: [“JFK”,”ATL”,”JFK”,”SFO”,”ATL”,”SFO”].
另外一种可能的结构: [“JFK”,”SFO”,”ATL”,”JFK”,”ATL”,”SFO”]. 但是它的字典词汇顺序不正确。

算法设计:

package com.bean.algorithmbasic;import java.util.ArrayList;import java.util.HashMap;import java.util.List;public class ReconstructionItinerary {    /*     * 算法设计:     * 输入参数:表示行程的二维字符串数组     * 返回值:用List结构表示的行程     *      * */    public List
findItinerary(String[][] tickets) { ArrayList
result = new ArrayList
(); if (tickets == null || tickets.length == 0) { return result; } int total = tickets.length + 1; HashMap
> map = new HashMap
>(); for (int i = 0; i < tickets.length; i++) { if (map.containsKey(tickets[i][0])) { ArrayList
tmp = map.get(tickets[i][0]); listAdd(tickets[i][1], tmp); } else { ArrayList
tmp = new ArrayList
(); tmp.add(tickets[i][1]); map.put(tickets[i][0], tmp); } } result.add("JFK"); itineraryHelper("JFK", map, result, total, 1); return result; } public boolean itineraryHelper(String current, HashMap
> map, ArrayList
result, int total, int num) { if (num >= total) { return true; } if (!map.containsKey(current) || map.get(current).size() == 0) { return false; } ArrayList
curList = map.get(current); int i = 0; while (i < curList.size()) { String next = curList.remove(i); result.add(next); // if (itineraryHelper(next, map, result, total, num + 1)) { return true; } result.remove(result.size() - 1); listAdd(next, curList); i++; } return false; } public void listAdd(String value, ArrayList
list){ if(list.size() == 0){ list.add(value); return; } else{ int i = 0; while(i < list.size()){ if(value.compareTo(list.get(i)) <= 0){ list.add(i, value); return; } i++; } list.add(value); return; } }// public void listAdd(String value, ArrayList
list) { // if (list.size() == 0) { // list.add(value);// return;// } else { // int i = 0;// while (i < list.size()) { // if (value.compareTo(list.get(i)) <= 0) { // list.add(i, value);// return;// }// i++;// }// list.add(value);// return;// }// } public static void main(String[] args) { // TODO Auto-generated method stub //String[][] ticketsDemo= { {"MUC", "LHR"}, {"JFK", "MUC"}, {"SFO", "SJC"}, {"LHR", "SFO"}}; String[][] ticketsDemo= { { "JFK","SFO"}, { "JFK","ATL"}, { "SFO","ATL"}, { "ATL","JFK"},{ "ATL","SFO"}}; ReconstructionItinerary reItinerary=new ReconstructionItinerary(); List
listItinerary=reItinerary.findItinerary(ticketsDemo); System.out.println(listItinerary); }}

(完)

转载地址:http://sgvdi.baihongyu.com/

你可能感兴趣的文章
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>
[关注大学生]大学毕业生择业:是当"鸡头"还是"凤尾"?
查看>>
[茶余饭后]10大毕业生必听得歌曲
查看>>
gdb调试命令的三种调试方式和简单命令介绍
查看>>
C++程序员的几种境界
查看>>
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>