第九周学习笔记

上周力扣周赛的时候在搞计组忘记了,后来记起来时间早过了只能去做模拟周赛了,只做出来了前面两题,第二题太简单了就不说了,然后想写下第一题的笔记,主要是想分享一下在第一题学到的新东西。

5400. 旅行终点站

示例 1:

输入:paths = [["London","New York"],["New York","Lima"],["Lima","Sao Paulo"]]
输出:"Sao Paulo"

示例 2:

输入:paths = [["B","C"],["D","B"],["C","A"]]
输出:"A"

示例 3:

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

有话想说:
  • 做这题的时候以为这个很简单的,然后死在编译的问题上,少了最后一局 return “”然后一直报错,后来去评论区看了才知道这个问题。然后上个星期刚知道了set的用法嘛,在评论区的时候看到有用集合解决的,就去理解了一下,看懂了大佬的代码也算是学到了QAQ。
  • 上周从经典的排序+去重问题学到的集合set的用法。(第八周笔记发在了有道云笔记)
我的代码
class Solution {
public:
    string destCity(vector>& paths) {
        int flag;
        for(int i=0;i
收获:

find()返回一个指向被查找到元素的迭代器,即返回该元素的位置,如果没找到,就返回end();
end() 返回最末元素的迭代器(实指向最末元素的下一个位置),用c的理解可以理解为vis.end()为'\0';
auto声明变量为自动变量,原理就是根据后面的值,来自己推测前面的类型是什么;

两个方法在耗时、内存消耗上没有什么差别,反而是笨方法的效率更好点,但是学会了新的方法去做题也是个不少的收获。
思路:

遍历所有的起点并放入集合vis中,再利用end()和find()这个函数的特性就可以直接找到终点了(实在是高明)

大佬代码:
class Solution {
public:
    string destCity(vector>& paths) {
        set vis;
        for (auto p : paths)//自定义一个一维容器p表示paths[?]中的两个城市,
            vis.insert(p[0]);//把p[0]插入集合,这里的p[0]是指遍历到的起点城市
        for (auto p : paths)
            if (vis.find(p[1]) == vis.end()) return p[1];//这里的p[1]是指遍历到的终点城市,vis.find(p[1])返回在集合vis中“p[1]”这个元素所在的位置,如果找不到“p[1]”则返回vis.end()即'\0'
        return "";
    }
};

你可能感兴趣的:(第九周学习笔记)