字节题库模拟面试——根到叶路径上的不足节点、验证IP地址、平行课程

根到叶路径上的不足节点

一遍dfs,记录根到当前点的距离,和叶子节点到当前点距离最大值。

然后判断以下是否删除即可。

链表维护的树,写了半小时。。太慢了

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int dfs(TreeNode* root,TreeNode* fa,int op,int limit,int sm){
        //if(root == nullptr || fa==nullptr)return 0;
        int dis=-(1e9+7);
        if(root->left)dis = max(dis,dfs(root->left,root,0,limit,sm+root->val));
        if(root->right)dis = max(dis,dfs(root->right,root,1,limit,sm+root->val));
        if(dis==-(1e9+7))dis=0;
        dis+=root->val;
        //cout<val<<" -> "<val<<" "<class Solution {
public:
    string validIPAddress(string IP) {
        int dian=0,fen=0;
        int n=IP.length();
        for(int i=0;i<=n;i++){
            if(IP[i]=='.')dian++;
            if(IP[i]==':')fen++;
        }
        bool flag=true;
        if(dian==3 && fen==0){
            int tp=0,nm=0;
            IP+='.';
            for(int i=0;i<=n;i++){
                if(IP[i]=='.'){
                    if(tp>255)flag=false;
                    if(nm==0||nm>4)flag=false;
                    tp=nm=0;
                }else if(IP[i]>='0' && IP[i]<='9'){
                    int z=IP[i]-'0';
                    if(z==0 && tp==0 && !(i+1==n || IP[i+1]=='.'))flag=false;
                    if(tp>255){
                        flag=false;
                        break;
                    }
                    tp*=10;tp+=z;nm++;
                }else{
                    flag=false;
                    break;
                }
            }
            if(flag)return "IPv4";
        }else if(fen==7 && dian==0){
            IP+=':';
            unordered_mapmp;
            mp['a']=10,mp['A']=10;
            mp['b']=11,mp['B']=11;
            mp['c']=12,mp['C']=12;
            mp['d']=13,mp['D']=13;
            mp['e']=14,mp['E']=14;
            mp['F']=15,mp['f']=15;
            int tp=0,nm=0;
            for(int i=0;i<=n;i++){
                cout< "<4)flag=false;
                    tp=0;
                    nm=0;
                }else if((IP[i]>='0' && IP[i]<='9' )|| mp[IP[i]]){
                    if(IP[i]!='0')tp=1;
                    nm++;
                }else{
                    flag=false;
                    break;
                }
            }
            if(flag)return "IPv6";
        }
        return "Neither";
    }
};

 

平行课程

简单拓扑排序题。。

但只有这道题是hard,可能带点算法吧。。

10分钟切掉。

class Solution {
public:
    vectorg[5100];
    int du[5100],d[5100];
    int minimumSemesters(int N, vector>& relations) {
        int m = relations.size();
        memset(du,0,sizeof(du));
        memset(d,0,sizeof(d));
        for(int i=0;iq;
        int mx=1;
        for(int i=1;i<=N;i++){
            if(du[i]==0){
                d[i]=1;
                q.push(i);
            }
        }
       // for(int i=1;i<=N;i++)cout<  "<

 

你可能感兴趣的:(面试算法题)