当前位置:   article > 正文

华为OD 技术综合面,手撕代码真题整理(123):瓷砖铺放问题 | 围棋棋盘判断_华为od综面

华为od综面

特别提醒,订阅专栏前一定要看好题解语言哦~

OD 统一考试如果有时间准备,参考下述博客

华为 OD 机试题(A&B 卷)真题抽中记录文档(更新到 10 月 17 日)

华为OD 技术综合面,手撕代码真题整理(二八):网络包调度 | 最小费用最大流问题

一、华为 OD 应聘流程

第一步:投递简历
提供姓名、邮箱、手机号、身份证号,用于锁定,所以投递前需要考虑清楚,投到项目组之后,一般不会转给另一个项目的 HR 了,也就是被锁定。

第二步:机试

3 道算法题,400 分满分,一般 1 个月的准备时间,华为机试必须要 300 分以上,没有过半年之后才能参加下一次考试。

第三步:技术面
2 轮技术面试。

第四步:HR 与主管面试

第五步:录用,发 offer

华为 OD 手撕代码

注意手撕代码题目,不提供 100%通过题解,仅提供示例代码,供大家学习使用~

题目 1: 瓷砖铺放问题

场景描述: 你有一个矩形地板,和一些不同大小的正方形瓷砖。你需要找到一种方法,用这些瓷砖完全覆盖地板,而且不能有重叠或者破碎的瓷砖。

规则: 给定矩形地板的尺寸和一组瓷砖的尺寸,找到一种方法,以确保地板上每个位置都被覆盖。

输入: 地板的尺寸和瓷砖的尺寸列表。

输出: 返回是否可以完全覆盖地板,以及覆盖的方式。

示例代码:

def canTileFloor(floor_width, floor_length, tile_sizes):
    def backtrack(width, length, tiles):
        if width == 0 and length == 0:
            return True
        if width < 0 or length < 0 or not tiles:
            return False

        for i in range(len(tiles)):
            tile = tiles[i]
            if backtrack(width - tile, length, tiles[:i] + tiles[i+1:]) or \
               backtrack(width, length - tile, tiles[:i] + tiles[i+1:]):
                return True
        return False

    result = backtrack(floor_width, floor_length, tile_sizes)
    return result

# 示例用法
floor_width = 5
floor_length = 3
tile_sizes = [2, 1, 3]
result = canTileFloor(floor_width, floor_length, tile_sizes)
if result:
    print("可以完全覆盖地板")
else:
    print("无法完全覆盖地板")
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

题目 2: 围棋棋盘判断

场景描述: 你是一名围棋玩家,需要确定在一个围棋棋盘上,哪些棋子是被完全包围住的,即不再有出路。

规则: 围棋规则是如果一组相邻的棋子被另一组颜色相同的棋子包围,那么它们就被吃掉。你需要实现一个算法,以确定哪些棋子是被完全包围住的。

输入: 围棋棋盘,其中 1 表示白子,-1 表示黑子,0 表示空格。

输出: 返回被完全包围的棋子的位置。

示例代码:

def surrounded_regions(board):
    if not board:
        return []

    rows, cols = len(board), len(board[0])

    def dfs(i, j):
        if i < 0 or i >= rows or j < 0 or j >= cols or board[i][j] != 'O':
            return
        board[i][j] = 'T'
        dfs(i+1, j)
        dfs(i-1, j)
        dfs(i, j+1)
        dfs(i, j-1)

    for i in range(rows):
        for j in range(cols):
            if (i == 0 or i == rows - 1 or j == 0 or j == cols - 1) and board[i][j] == 'O':
                dfs(i, j)

    for i in range(rows):
        for j in range(cols):
            if board[i][j] == 'O':
                board[i][j] = 'X'
            elif board[i][j] == 'T':
                board[i][j] = 'O'

# 示例用法
board = [
    ['X', 'X', 'X', 'X'],
    ['X', 'O', 'O', 'X'],
    ['X', 'X', 'O', 'X'],
    ['X', 'O', 'X', 'X']
]

surrounded_regions(board)
for row in board:
    print(row)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/505579?site
推荐阅读
相关标签
  

闽ICP备14008679号