华为OD机试-2024年C卷&D卷真题汇总(Java/Python/C++)
华为OD机试是很多程序员求职过程中需要面对的重要环节,尤其是在2024年,随着技术的发展和面试模式的多样化,考题逐渐趋向于算法与数据结构的结合,考察应聘者的编程能力和逻辑思维能力。本文将总结一些2024年C卷和D卷的真题,并给出相应的代码示例。
题目一:数组中的最长递增子序列
题目要求找到给定数组中的最长递增子序列的长度。这个问题可以通过动态规划来解决。
Python示例代码:
def length_of_lis(nums):
if not nums:
return 0
dp = [1] * len(nums)
for i in range(1, len(nums)):
for j in range(i):
if nums[i] > nums[j]:
dp[i] = max(dp[i], dp[j] + 1)
return max(dp)
# 测试
nums = [10, 9, 2, 5, 3, 7, 101, 18]
print(length_of_lis(nums)) # 输出: 4
题目二:字符串的最长公共前缀
给定一组字符串,找出它们的最长公共前缀。如果不存在公共前缀,返回空字符串。
Java示例代码:
public class LongestCommonPrefix {
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) return "";
}
}
return prefix;
}
public static void main(String[] args) {
LongestCommonPrefix lcp = new LongestCommonPrefix();
String[] strs = {"flower", "flow", "flight"};
System.out.println(lcp.longestCommonPrefix(strs)); // 输出: "fl"
}
}
题目三:二叉树的最大深度
给定一个二叉树,返回其最大深度。二叉树的深度是指从根节点到最远叶节点的最长路径上的节点数量。
C++示例代码:
#include <iostream>
using namespace std;
// 定义二叉树节点
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
// 计算二叉树最大深度
int maxDepth(TreeNode* root) {
if (!root) return 0;
return max(maxDepth(root->left), maxDepth(root->right)) + 1;
}
int main() {
// 构造二叉树
TreeNode* root = new TreeNode(3);
root->left = new TreeNode(9);
root->right = new TreeNode(20);
root->right->left = new TreeNode(15);
root->right->right = new TreeNode(7);
cout << maxDepth(root) << endl; // 输出: 3
return 0;
}
总结
以上是一些2024年华为OD机试C卷和D卷的真题示例以及相关的代码实现。这些问题涵盖了动态规划、字符串处理和树的深度遍历等核心编程技巧。建议面对这些题目时,考生不仅要理解算法的核心思想,还要练习代码的实现,以提高在真实环境中的解题能力。同时,熟悉Python、Java和C++三种语言的语法特点,能够帮助你根据具体情况选择最合适的语言进行解题。希望这些总结对各位同学有所帮助,祝大家在机试中取得优异成绩!