岗位:Android开发工程师

单选题和多选题

  • C++基础(引用与指针、const)
  • 操作系统(进程与线程、并发)
  • 数据结构(二叉树的前中后序遍历、栈、链表)
  • 计算机网络(TCP、OSI模型)

编程题

  • 第一题:最大整数值
    给定一个正整数数组,用其中的整型数字组成最大的整型值。
class Solution {
public:
    /**
     * Note: 类名、方法名、参数名已经指定,请勿修改
     *
     *
     * 最大正整数
     * @param arrs int整型vector 正整数数组
     * @return int整型
     */
    int maxIntValue(vector<int>& arrs) {
        // write code here
        long long ret = 0;
        int i = arrs.size() - 1;
        sort(arrs.begin(), arrs.end());
        while (i >= 0) {
            ret = ret * 10 + arrs[i];
            i--;
        }
        return ret;
    }
};
  • 第二题:和leetcode 572. 另一个树的子树类似,但不完全一致。

此题题目给出了限定,空树不是任何树的子树,所以子树为空的情况,要返回false。在进入dfs的地方如果右树为空,直接返回false

利用572题的思路完成代码,测试用例已经可以通过70%,剩下的30%就要考虑到此题允许右树是左树的一部分,这部分的最后一层在左树中不必完全是叶子结点。

例如这个测试用例:
在这里插入图片描述
572题要求返回false,但是本题就会要求返回true

struct TreeNode {
 	int val;
 	struct TreeNode *left;
 	struct TreeNode *right;
 	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};


class Solution {
public:
    /**
     * Note: 类名、方法名、参数名已经指定,请勿修改
     *
     *
     *
     * @param tree1 TreeNode类
     * @param tree2 TreeNode类
     * @return bool布尔型
     */
    bool IsSubtree(TreeNode* tree1, TreeNode* tree2) {
        // write code here
        return dfs(tree1, tree2);
    }

    bool check(TreeNode* o, TreeNode* t) {
        if (t == nullptr) return true;//卡在70%的用例通过卡了好久,最后是这里,返回true的情况,左树不一定需要到叶子节点,o不需要也为nullptr。
        if ((o == nullptr && t != nullptr)
            || o->val != t->val)
            return false;
        return check(o->left, t->left) && check(o->right, t->right);
    }

    bool dfs(TreeNode* o, TreeNode* t) {
        if (t == nullptr || o == nullptr) return false;
        return check(o, t) ||  dfs(o->left, t) || dfs(o->right, t);
    }
};
  • 第三题:最长连续的子串
    求输入字符串中只包含一个字符的最长的连续子串,字符大小写同等看待,最长连续的子串长度都为1时,默认返回字符串中的第一个字符。

示例:
输入

s = “ssssssssssssssshhhhopeeeeeeee”

输出

sssssssssssssss

class Solution {
public:
    /**
     * Note: 类名、方法名、参数名已经指定,请勿修改
     *
     *
     *
     * @param str string字符串 1 <= str.length <= 1000
     * @return string字符串
     */
    string findLongestSubstr(string str) {
        // write code here
        string subs = str.substr(0, 1);			//一定要为返回值赋初值
        char cur = str[0];
        int left = 0, right = 0, count = 1, maxCount = 1;
        for (int i = 1; i < str.size(); i++) {
            if (str[i] == cur || abs(str[i] - cur) == 32) {
                right = i;
                count++;
            }
            else {
                cur = str[i];
                left = i;
                right = i;
                count = 1;
            }

            if (count > maxCount) {
                maxCount = count;
                subs = str.substr(left, right - left + 1);
            }
        }
        return subs;
    }
};
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐