zoukankan      html  css  js  c++  java
  • leetcode 27场双周赛思路

    由于没时间参加 这里说下思路

    1 通过翻转子数组使两个数组相等 比较两个数组是否能够通过转换子数组获得 其实就是比对里面的元素是否相同 排序并比较就好了 

    class Solution {
    public:
        bool canBeEqual(vector<int>& target, vector<int>& arr) {
            sort(target.begin(),target.end());
            sort(arr.begin(),arr.end());
            
            return target==arr;
        }
    };

    检查一个字符串是否包含所有长度为 K 的二进制子串 根据指定的长度 用双指针记录获取的字符串 如果获取的类型数目 等于改长度01能组成的所有类型 则说明包含

    这里放一个很简短的代码 缺点是可能运行时间太长 后期可能会被判定tle

    class Solution {
    public:
        bool hasAllCodes(string s, int k) {
            unordered_set<string> ss;
            for(int l =0;l<s.size();l++){
                int r = l+k-1;
                if(r>= s.size()) break;
                ss.insert(s.substr(l,k));
                if(ss.size() == 1<<k) return true;
            }
              
            return ss.size() == 1<<k;
            
        }
    };

    课程安排 IV  闭包传递。这里使用的是哈希记录每个点的先修点,加速查找

     1 class Solution {
     2 public:
     3    
     4     vector<bool> checkIfPrerequisite(int n, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {
     5     unordered_map<int, unordered_set<int>> ms(n + 10);
     6 
     7     for (auto& e : prerequisites) {
     8         int a = e[0];
     9         int b = e[1];
    10 
    11         ms[b].insert(a);
    12     }
    13     vector<bool> ret;
    14     int vis[110] = { 0 };
    15     for (auto& e : queries) {
    16         int a = e[0];
    17         int b = e[1];
    18         memset(vis, 0, sizeof(vis));
    19 
    20         if (ms[b].count(a) != 0) {
    21             ret.push_back(true);
    22             continue;
    23         }
    24         queue<int> Q;
    25         for (auto& e : ms[b]) {
    26             Q.push(e);
    27         }
    28         int find = 0;
    29         //bfs查找
    30         while (!Q.empty()) {
    31             int ele = Q.front(); Q.pop();
    32             if (vis[ele] == 1) continue;
    33             vis[ele] = 1;
    34             if (ms[ele].count(a) != 0) {
    35                 ret.push_back(true);
    36                 find = 1;
    37                 break;
    38             }
    39 
    40             for (auto& e : ms[ele]) {
    41                 Q.push(e);
    42             }
    43         }
    44         if (find == 0) {
    45             ret.push_back(false);
    46         }
    47 
    48     }
    49 
    50 
    51     return ret;
    52 }
    53     
    54 };
    View Code

     上面的代码现在判定为TLE了 超时 过不了。

    我们也可以使用floyd算法,计算每个点之间是否有路线可以到达即可

    class Solution {
    public:
        vector<bool> checkIfPrerequisite(int n, vector<vector<int>>& prerequisites, vector<vector<int>>& queries) {
            vector<vector<int>> graph(150,vector<int>(150,99990));
        
            for(int i =0;i < prerequisites.size();i++){
                int a = prerequisites[i][0];
                int b = prerequisites[i][1];
                
                graph[a][b] = 1;
            }
            
            for (int k = 0; k < n; k ++ )
                for (int i = 0; i < n; i ++ )
                    for (int j = 0; j < n; j ++ )
                        graph[i][j] = min(graph[i][j], graph[i][k] + graph[k][j]);
            
             vector<bool> ret;
            for(int i = 0; i < queries.size();i++ ){
                int a = queries[i][0];
                int b = queries[i][1];
                
                if(graph[a][b] > 99990/2){
                    ret.push_back(false);
                }else{
                    ret.push_back(true);   
                }
            }
    
            return ret;
        }
    };

    摘樱桃 II 动态规划

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    Redis源码阅读笔记(2)——字典(Map)实现原理
    Partition List ——LeetCode
    docker format (golang template)
    markdown 换行
    pecan快速教程
    nvdimm
    k8s device plugin
    linux 文件同步
    复制MIFARE Classic卡
    install docker swarm on centos
  • 原文地址:https://www.cnblogs.com/itdef/p/12995521.html
Copyright © 2011-2022 走看看