【2022】贝壳找房秋招C++工程师笔试卷1

【2022】贝壳找房秋招C++工程师笔试卷1_第1张图片

题解:直接暴力

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @param k int整型 
     * @return string字符串
     */
    string NS_String(string s, int k) {
        // write code here
        vectora(26,0);
        for(int i=0;i=26) 
               {
                break;
               }
               s2="";
               char c='a'+num;
               for(int j=0;j

 【2022】贝壳找房秋招C++工程师笔试卷1_第2张图片

 题解:1....n.....2

            1...n......2

作为一整个的一个循环(2*n-2),然后对其进行处理。

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @param m long长整型 
     * @return long长整型vector
     */
    vector FarmerNN(int n, long long m) {
        // write code here
        vectorres(n,0);
        if(n==1){
            res[0]=m;
            return res;
        }
        long long x=m/(2*n-2);
        int w=m%(2*n-2);
        for(int i=0;i

【2022】贝壳找房秋招C++工程师笔试卷1_第3张图片

 题解:滑动窗口+哈希,代码有些不易理解,中间需要自己考虑一下;

比如 x1 x2 y2 y1(这里假x1^y1=t,x2^y2=t)

当r处于y1位置时,此时l处于y2这个位置

class Solution {
public:
    long long section(vector& a, int t) {
        unordered_map mp;
        long long res=0;
        int l=0;
        int r=0;
        while(r0){
                l=max(l,mp.at(a[r]^t)+1);
            }
            res+=(r-l);
            mp[a[r]]=r;
            r++;
        }
        return res;
    }
};

【2022】贝壳找房秋招C++工程师笔试卷1_第4张图片

 题解:首先使用hashmap标记上具有相同子节点的节点,然后对具有相同节点的节点进行暴力比较是否结构相同,还利用了map的建的有序性,我们使用rbegin和rend使得其键值从大 到小排序,这样的话,我们第一次遇到了相同的同构子树,即是所求最大同构子树)

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @return int整型
     */
   
    map>mp;
    int count(TreeNode* root){
        if(root==nullptr) return 0;
        int m=1+count(root->left)+count(root->right);
        mp[m].push_back(root);
        return m;
    }

    bool com(TreeNode* root1,TreeNode* root2){
        if(root1==nullptr && root2==nullptr) return true;
        else if(root1!=nullptr && root2!=nullptr) return com(root1->left,root2->left)&&com(root1->right,root2->right);
        else return false;
    }
    // map> omap;
     int res=0;
    int maxSubTree(TreeNode* root) {
        if(root==nullptr) return 0;
        count(root);//计算每个节点的子节点数目;
        auto s=mp.rbegin();
    //    cout<first;
        while(s!=mp.rend()){
            vector node=s->second;
            for(int i=0;ifirst;
                        // res=max(res,s->first);
                    }
                }
            }
            s++;
        }
        return 0;
 
    }

};

你可能感兴趣的:(c++,算法)