chenhuiYj / note

开发笔记
6 stars 0 forks source link

练习题8:找出终点城市 #19

Open chenhuiYj opened 4 years ago

chenhuiYj commented 4 years ago

给你一份旅游线路图,该线路图中的旅行线路用数组 paths 表示,其中 paths[i] = [cityAi, cityBi] 表示该线路将会从 cityAi 直接前往 cityBi 。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。

题目数据保证线路图会形成一条不存在循环的线路,因此只会有一个旅行终点站。

实例1

输入:paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
输出:"Sao Paulo" 
解释:从 "London" 出发,最后抵达终点站 "Sao Paulo" 。本次旅行的路线是 "London" -> "New York" -> "Lima" -> "Sao Paulo" 。

实例2

输入:paths = [["B","C"],["D","B"],["C","A"]]
输出:"A"
解释:所有可能的线路是:
"D" -> "B" -> "C" -> "A". 
"B" -> "C" -> "A". 
"C" -> "A". 
"A". 
显然,旅行终点站是 "A" 。

实例3

输入:paths = [["A","Z"]]
输出:"Z"

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/destination-city 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路 1.首先,终点城市在 paths 里面只会出现一次 2.根据 1 的过滤(paths扁平化后过滤),最后会得到两个城市,始点城市和终点城市。 3.根据 2 的过滤,得到的两个城市,最后如果在 paths 里面的 index 是偶数的就是始点城市,如果是奇数终点城市。

代码如下

var destCity = function(paths) {
    let _paths=paths.flat(2)
    let _pathKey=[...new Set(_paths)]
    return _pathKey.filter((item,index)=>JSON.stringify(paths).split(item).length===2&&index%2===1)[0]
};

// 一行代码实现

var destCity = function(paths) {
    return [...new Set(paths)].flat(2).filter((item,index)=>JSON.stringify(paths).split(item).length===2&&index%2===1)[0]
};

方式二

var destCity = function(paths) {
    let _paths=paths.flat(2)
    let resultCount={}
    let resultIndex={}
    for(let i=0;i<_paths.length;i++){
       resultCount[_paths[i]]=resultCount[_paths[i]]?++resultCount[_paths[i]]:1
       resultIndex[_paths[i]]=resultIndex[_paths[i]]?resultIndex[_paths[i]]+''+i:i
    }
    for(let item of _paths){
       if(resultCount[item]===1&&resultIndex[item]%2){
            return item
        }
    }
};

方式三

var destCity = function(paths) {
    let _pathFirst=[]
    let _pathEnd=[]
    paths.forEach(item=>{
        _pathFirst.push(item[0])
        _pathEnd.push(item[1])
    })
    for(let item of _pathEnd){
        if(!_pathFirst.includes(item)){
            return item
        }
    }
};