头条题

image.png

image.png

image.png

image.png

image.png

第二题答案:

int lengthOfLIS(vector<int>& nums) {
    vector<int> dp;
    for (int i = 0; i < nums.size(); ++i) {
        int left = 0, right = dp.size();
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (dp[mid] <= nums[i]) left = mid + 1;
            else right = mid;
        }
        if (right >= dp.size()) dp.push_back(nums[i]);
        else dp[right] = nums[i];
    }
    return dp.size();
}
int main() {
    int n;
    vector<int> nums;
    std::cin >>n;
    for (int i = 0; i < n; ++i) {
        int item;
        std::cin >> item;
        nums.push_back(item);
    }
    std::cout << lengthOfLIS(nums);
}

最长递增子序列

头条题


image.png

image.png

image.png

第一题是朋友圈,并查集典型题

public:
    int dfs(vector<vector<int>> M, vector<bool> &visited, int p) {
        if(visited[p]) return 0; //如果当前节点被访问过 直接结束
        else {
            visited[p] = true; //将当前节点标记为访问过
            int count =1;
            for (int i = 0; i < M.size(); i++) {//遍历 找到当前这个人的朋友
                if (M[p][i] == 1 && !visited[i] && i != p) { //如果M数组值为1 且这个人不是自己 就是朋友
                    count += dfs(M, visited, i); //接着找朋友
                }
            }
            return count; //最后返回一共找了几次朋友 虽然并不需要这个值 只要有朋友就可以了
        }
    }
    int findCircleNum(vector<vector<int>>& M) {
        int py = 0; //朋友圈的个数
        vector<bool> visited(M.size(), false);//初始化一个visited数组 用于记录访问的情况
        for(int i=0;i<M.size();i++)
            if(dfs(M,visited,i)) py++;//如果dfs的结果不是0,证明存在朋友圈。
        return py;
    }
};

第二题是卡特兰典型题

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这两天练习倒立,肩膀和屁股特别酸。之前最怕手臂支撑的倒立,现在多撑撑,会少些害怕,但是可能腋窝的力量不够,感觉久了...
    春风拂看露华浓阅读 825评论 0 0
  • 三毛是一个奇女子。 看完她的作品,犹如在沙漠小住几日,风吹过来似乎有沙子扫过脸庞。虽然三毛并没有用华...
    顶呱呱阅读 1,644评论 0 0
  • 连续打游戏十个小时以后,昨晚和军哥讨论起“为何我们打游戏的时候能够保持专注如此长的时间,而在做其他事情的时候总是很...
    恐惧扼杀思想阅读 2,325评论 0 0
  • 北京的春天悄悄地来了,虽然比南方迟了些,但依然挡不住她挥舞魔法棒为这座传奇的城市赋予灵动的生命力,你瞧,柳树的小小...
    她乘风而来阅读 493评论 0 1