栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

国庆每日一题,旅游的终点是哪个?

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

国庆每日一题,旅游的终点是哪个?

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

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

这题比较简单,我用了两种思路用来解题。目前对于C语言的一个hash表的增加和查找有了一个基本的认识。

第一种思路

双重for循环,只需要第重循环遍历完第二个元素,然后第二重循环遍历第一个元素,利用字符串对比函数,如果发现第二重循环里面,没有找到,则第一重循环里面的元素就是我们需要找的。

具体见代码:

char * destCity(char *** paths, int pathsSize, int* pathsColSize){
    //思路.双重for循环,找到只有终点的结点即可。
    //这种方法的时间复杂度较大,为n**2
    int i, j;
    int flag = 0;
    for(i = 0; i < pathsSize; i++){
        flag = 0;
        for(j = 0; j < pathsSize; j++){
            if(strcmp(paths[j][0],paths[i][1]) == 0){
            flag = 1;
            }
        }
        if(flag == 0){
            return paths[i][1];
        }          
    }
    return NULL;
}
第二种思路

hash表的使用,思路超简单,只需要将先将每个起点放入hash表中,然后再利用寻找函数,寻找每个终点,如果发现终点不在起点里面,则说明这个终点是最后的终点。

具体见代码:

struct hashmap{
    char *p;
    UT_hash_handle hh;
};

char * destCity(char *** paths, int pathsSize, int* pathsColSize){
    //哈希表:先对其中一个头元素存入哈希表中,然后尾元素再存入进去
    //如果找到了,则说明,可以,没找到,说明是终点
    struct hashmap *map = NULL;
    struct hashmap *tmp = NULL;
    for(int i = 0; i < pathsSize; i++){
        HASH_FIND_STR(map, paths[i][0], tmp);
        if(tmp == NULL){
            tmp =  (struct hashmap*)malloc(sizeof(struct hashmap));
            tmp -> p = paths[i][0];
            HASH_ADD_STR(map, p, tmp);
        }
    }
        for(int i = 0; i < pathsSize; i++){
        HASH_FIND_STR(map, paths[i][1], tmp);
        if(tmp == NULL){
            return paths[i][1];
        }
    }
    return NULL;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/284554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号