华为OD机试是一项重要的面试筛选环节,特别是在2024年,我们可以看到问题复杂度逐年上升,考察范围也越来越广泛。在此,我们将对“2024 B+C+D卷”中的一些代表性真题进行汇总,并给出C语言、C++、Java、Python和JavaScript等五种语言的解法示例,帮助同学们更好地备考。

1. 问题概述

在“2024 B+C+D卷”中,我们可以看到的问题多以数据结构与算法为主,特别是在数组、字符串、图等方面的应用。问题一般涉及到常用的算法如深度优先搜索(DFS)、广度优先搜索(BFS)、动态规划等。以下是几个经典的题目示例。

2. 题目示例

题目1:最长公共前缀

给定一组字符串,求它们的最长公共前缀。

解法:

  • C语言
#include <stdio.h>
#include <string.h>

char* longestCommonPrefix(char** strs, int strsSize) {
    if (strsSize == 0) return "";
    char* prefix = strs[0];
    for (int i = 1; i < strsSize; i++) {
        while (strncmp(prefix, strs[i], strlen(prefix)) != 0) {
            prefix[strlen(prefix) - 1] = '\0';
        }
    }
    return prefix;
}
  • Java
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;
}
  • Python
def longest_common_prefix(strs):
    if not strs:
        return ""
    prefix = strs[0]
    for s in strs[1:]:
        while not s.startswith(prefix):
            prefix = prefix[:-1]
            if not prefix:
                return ""
    return prefix
  • C++
class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
        if (strs.empty()) return "";
        string prefix = strs[0];
        for (size_t i = 1; i < strs.size(); ++i) {
            while (strs[i].find(prefix) != 0) {
                prefix = prefix.substr(0, prefix.size() - 1);
                if (prefix.empty()) return "";
            }
        }
        return prefix;
    }
};
  • JavaScript
function longestCommonPrefix(strs) {
    if (strs.length === 0) return "";
    let prefix = strs[0];
    for (let i = 1; i < strs.length; i++) {
        while (strs[i].indexOf(prefix) !== 0) {
            prefix = prefix.slice(0, -1);
            if (prefix === "") return "";
        }
    }
    return prefix;
}

3. 总结

通过以上代码示例,我们可以看到不同编程语言的解法虽然语法不同,但逻辑结构相似。掌握这些基本的算法题和常用解法,对于提升我们的编程能力和面试的信心都是大有裨益的。

准备OD面试的同学,建议大家多做历年真题,了解不同题型的解法,逐步提高自己的编程与算法思维。不仅要关注代码实现,更要理解背后的思路与数据结构的应用。在日常的练习中,不妨考虑在不同的语言中实现同一算法,进一步加深对算法的理解与掌握。希望这些示例能够帮助到正在备战华为OD机试的你们!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部