【面试题】找到 Alice 和 Bob 可以相遇的建筑

简介: 【面试题】找到 Alice 和 Bob 可以相遇的建筑

找到 Alice 和 Bob 可以相遇的建筑**

仅供学习

题目描述

一、第一版结果

可以找到结果,但是不能保证每次查找都是最左边位置


1.1 解题思路

使用动态规划来处理建筑的最远到达位置,并在此基础上处理查询。

1.2 优化方法

  • 计算每个建筑能到达的最远建筑
  • 使用动态规划来计算从每个建筑能到达的最远建筑。
  • 处理查询:
  • 对于每个查询,找出 Alice 和 Bob 的可到达范围的交集,并返回最左边的建筑。

1.3 实现步骤

  • 计算每个建筑的最远到达建筑
  • 使用 dp 数组来存储从每个建筑能够到达的最远建筑。
  • 处理查询:
  • 对于每个查询,检查 Alice 和 Bob 是否可以相遇,并返回最小的符合条件的建筑索引。


1.4 示例代码

以下是优化后的 Python 代码实现

def find_building(heights, queries):
    n = len(heights)

    # 动态规划计算每个建筑的最远到达建筑
    farthest = list(range(n))

    for i in range(n):
        j = i + 1
        while j < n:
            if heights[j] > heights[i]:
                farthest[i] = j
            j += 1

    results = []

    # 处理每个查询
    for ai, bi in queries:
        if ai >= n or bi >= n:
            results.append(-1)
            continue

        # 找到 Alice 能到达的范围
        max_reach_alice = farthest[ai]
        for in_n in farthest[ai:]:

            if n < in_n or bi < in_n:
                break
            max_reach_alice = in_n
        print(ai, bi, max_reach_alice)
        # 找到 Bob 能到达的范围
        max_reach_bob = farthest[bi]
        for in_n in farthest[bi:]:

            if n < in_n or ai < in_n:
                break
            max_reach_bob = in_n
        print(ai, bi, max_reach_bob)

        # 判断是否可以相遇
        if max_reach_alice >= bi and max_reach_bob >= ai:
            results.append(min(max_reach_alice, max_reach_bob))
        else:
            results.append(-1)

    return results

1.5 代码解释

  • 计算最远到达建筑
  • 使用动态规划(farthest 数组)来存储从每个建筑能够到达的最远建筑。
  • 处理查询
  • 对于每个查询,找到 Alice 和 Bob 能够相遇的最右边建筑。

c++代码

找到 Alice 和 Bob 可以相遇的建筑,C++

相关文章
|
4月前
|
存储 Java
力扣经典150题第五十九题: 随机链表的复制
力扣经典150题第五十九题: 随机链表的复制
41 1
|
6月前
|
算法
【错题集-编程题】小红的ABC(字符串 + 找规律)
【错题集-编程题】小红的ABC(字符串 + 找规律)
|
6月前
|
算法
2024春晚纸牌魔术原理----环形链表的约瑟夫问题
2024春晚纸牌魔术原理----环形链表的约瑟夫问题
|
6月前
|
JSON 算法 C语言
【leecode刷题】各种哈希表最全面总结----以217. 存在重复元素为例
【leecode刷题】各种哈希表最全面总结----以217. 存在重复元素为例
114 0
【leecode刷题】各种哈希表最全面总结----以217. 存在重复元素为例
|
11月前
|
人工智能 算法 BI
C++二分查找算法:找到 Alice 和 Bob 可以相遇的建筑
C++二分查找算法:找到 Alice 和 Bob 可以相遇的建筑
|
人工智能 C语言
信奥赛一本通(2034:【例5.1】反序输出)
【题目描述】 输入n个数,要求程序按输入时的逆序把这n个数打印出来,已知整数不超过100个。也就是说,按输入相反顺序打印这n个数。 【输入】 输入一行共有n个数,每个数之间用空格隔开。 【输出】
966 0
为什么QQ能帮你找到失散多年的兄弟?----图论
为什么QQ能帮你找到失散多年的兄弟?----图论
为什么QQ能帮你找到失散多年的兄弟?----图论
|
算法 数据处理 索引
LeetCode 448. 找到所有数组中消失的数字 | 算法-从菜鸟开始
算法,从承认自己是一个菜鸟开始! 话不多说,让我们继续我们的算法之旅。
113 0
|
算法 Java Python
【每日算法】一题五解:找「两条链表的第一个公共节点」|Python 主题月
【每日算法】一题五解:找「两条链表的第一个公共节点」|Python 主题月