高德笔试 高德笔试题 0321

笔试时间:2024年03月21日

历史笔试传送门:2023秋招笔试合集

第一题

题目

给你二叉树的根节点root和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。叶子节点是指没有子节点的节点。

输入

root =[5,4,8,11,null,13,4,7,2,null,null,5,1]

targetSum = 22

输出

[[5,4,11,2],[5,8,4,5]]

说明

树中节点总数在范围[0,5000]内 -1000<= Node.val<= 1000 -1000 <= targetSum <= 1000。

参考题解

二叉树路径和问题。先使用深度优先搜索(DFS)的方式遍历二叉树,如果当前节点是叶子节点,且目标和为 0,则说明找到了一条路径。找到所有路径和等于给定目标和的路径,并将其存储在二维向量ret 中返回。

C++:[此代码未进行大量数据的测试,仅供参考]

class Solution {
public:
    vector<vector<int>> ret;
    vector<int> path;

    void dfs(TreeNode* root, int targetSum) {
        if (root == nullptr) {
            return;
        }
        path.emplace_back(root->val);
        targetSum -= root->val;
        if (root->left == nullptr && root->right == nullptr && targetSum == 0) {
            ret.emplace_back(path);
        }
        dfs(root->left, targetSum);
        dfs(root->right, targetSum);
        path.pop_back();
    }

    vector<vector<int>> pathSum(TreeNode* root, int targetSum) {
        dfs(root, targetSum);
        return ret;
    }
};

Java:[此代码未进行大量数据的测试,仅供参考]

import java.util.ArrayList;
import java.util.List;

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

public class Solution {
    List<List<Integer>> ret = new ArrayList<>();
    List<Integer> path = new ArrayList<>();

    public void dfs(TreeNode root, int targetSum) {
        if (root == null) {
            return;
        }
        path.add(root.val);
        targetSum -= root.val;
        if (root.left == null && root.right == null && targetSum == 0) {
            ret.add(new ArrayList<>(path));
        }
        dfs(root.left, targetSum);
        dfs(root.right, targetSum);
        path.remove(path.size() - 1);
    }

    public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
        dfs(root, targetSum);
        return ret;
    }
}

Python:[此代码未进行大量数据的测试,仅供参考]

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def __init__(self):
        self.ret = []
        self.path = []

    def dfs(self, root, targetSum):
        if not root:
            return
        self.path.append(root.val)
        targetSum -= root.val
        if not root.left and not root.right and targetSum == 0:
            self.ret.append(self.path[:])
        self.dfs(root.left, targetSum)
        self.dfs(root.right, targetSum)
        self.path.pop()

    def pathSum(self, root, targetSum):
        self.dfs(root, targetSum)
        return self.ret

第二题

题目

编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。

输入

strs =["flower" ,"flow" ,"flight"]

输出

"fl”

说明

1 <= strs.length <= 200

0<= strs[i].length <= 200

strs[i]仅由小写英文字母组成

输入

["flower" ,"flow" ,"flight"]

输出

"fl"

参考题解

最长公共前缀。可以从第一个字符串开始,逐个字符地与其他字符串的相同位置进行比较,如果在某一位置出现不匹配或者字符串长度超过第一个字符串,就返回前面已匹配的部分

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论

相关推荐

询问实习,工作亮点。签名和加密区别加密一般是怎么做的?rpc的通信超时如何解决?https工作流程,非对称加密使用的算法,ca证书。喜欢做java工程还是数据开发?1.聊java内存模型JMM解决了什么问题?线程不安全从操作系统层面怎么导致的?happens-before规则有哪些?解决的什么问题?那volatile的happens-before规则是什么?volatile可见性怎么保证的?-从操作系统和读写屏障分析volatile有原子性吗?64位和32位机器在多线程下需要注意什么?synchronized相比volatile区别?原子性怎么保证的?synchronized的可见性如何保证?-happens-before**锁定规则和monitor指令**juc下的Lock相比于synchronized区别?是如何保证可见性的?说一下AQS?公平锁和非公平锁实现?AQS框架下的读写锁具体怎么实现的?如何去确定读锁写锁状态?读写,写写互斥和读读共享是怎么实现的?为什么有了synchronized,还需要Lock?Lock有哪些api是synchronized不能做到的?还有什么可以保证线程安全的方案?2.线程池默认创建的线程池,阻塞队列是无界有界?线程池线程越多效率越高吗?边界在哪?如何选择线程池参数?阻塞队列怎么实现的?3.其他八股单例模式,局部变量是线程安全的吗?存放在哪?对象可以放在栈帧吗,为什么?bean对象线程安全吗lambda表达式了解吗最后问了下数据库索引数据结构结束。#八股##面试##软件开发2024笔面经##面经#
查看27道真题和解析 软件开发2024笔面经
点赞 评论 收藏
转发
点赞 1 评论
分享
牛客网
牛客企业服务