首页 >后端开发 >Python教程 >我的 Python 语言解决方案来自《每周挑战》中的任务嵌套数组

我的 Python 语言解决方案来自《每周挑战》中的任务嵌套数组

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-28 11:59:10813浏览

My Python Language Solution to Task Nested Array from The Weekly Challenge

一、简介

每周挑战赛由 Mohammad S. Anwar 组织,是一场友好的竞赛,开发者通过解决两个任务进行竞争。它鼓励所有语言和级别的开发者通过学习、分享和娱乐来参与。

每周挑战 300 中的任务 2:嵌套数组提示开发人员找到最长的嵌套数组长度。

每周挑战 300 截止日期为 2024 年 12 月 23 日星期日 23:59(英国时间)。为了避免偏见,请考虑在比赛后阅读这篇文章。

2.任务2:嵌套数组

给定一个整数数组,@ints 长度为 n,包含 [0, n-1] 范围内的数字排列。

编写一个脚本来构建一个集合,set[i] = ints[i], ints[ints[i]], ints[ints[ints[i]]], ... 遵循以下规则:

  1. set[i] 中的第一个元素以元素 ints[i] 的选择开始。
  2. set[i] 中的下一个元素应该是 ints[ints[i]],然后是 ints[ints[ints[i]]],依此类推。
  3. 我们在 set[i] 中出现重复元素之前停止添加。

返回集合set[i]的最长长度。

每周挑战 300,任务 2:嵌套数组

示例 1 和示例 2 给出了给定输入的预期输出。

实施例1

Input: @ints = (5, 4, 0, 3, 1, 6, 2)
Output: 4

这里设置了一个最长的集合[0]:

set[0] = {ints[0], ints[5], ints[6], ints[2]} = {5, 6, 2, 0}

实施例2

Input: @ints = (0, 1, 2)
Output: 1

3.我的解决方案

def build_set_from_index(ints, starting_index):
    iset = [
            ints[starting_index],
            ]
    for ints_index in range(1, len(ints)):
        pindex = iset[ints_index - 1]
        value = ints[pindex]
        if value in iset:
            break
        iset.append(value)
    return iset

def return_longest_length(ints):
    max_length = 0
    for i in range(0, len(ints)):
        iset = build_set_from_index(ints, i)
        iset_length = len(iset)
        if iset_length > max_length:
            max_length = iset_length
    return max_length

我的解决方案使用两个函数 build_set_from_index 和 return_longest_length。

从索引构建集

build_set_from_index 返回根据参数ints 和starting_index 构造的set[starting_index]。我使用迭代方法来构造 set[]。

我的方法是从一个清晨开始的,以及随后对 set[] 构造规则的释义。最初,这些规则似乎很复杂。但是,在享用了一顿丰盛的早餐和咖啡因后重新查看示例 1 后,我更好地理解了这些规则。我还能够制定以下解释。

  • set[i] 是一个包含 k 个元素的集合。
    • 规则 3 限制了 k 的值。
    • 规则 3 规定何时停止向 set[i] 添加元素。
  • k = 0 时 set[i] 的值等于 ints[i]。
  • 对于 k > 0,set[i] 的第 k 个元素等于使用 set[i] 的第 (k-1) 个元素索引的 ints[] 的值。

使用释义方法,从 @ints 交互构造 set[0],如示例 1 所示,变得更加简单!

  • 当 k = 0 时,set[0] 的值等于 ints[0] = 5。set[0] 包含 {5}。
  • 当 k = 1 时,set[0] 的值等于 ints[5] = 6。set[0] 包含 {5, 6}。
  • 当 k = 2 时,set[0] 的值等于 ints[6] = 2。set[0] 包含 {5, 6, 2}。
  • 当 k = 3 时,set[0] 的值等于 ints[2] = 0。set[0] 包含 {5, 6, 2, 0}
  • 当 k = 4 时,停止,因为 set[0] 包含 ints[0] = 2。

返回最长长度

return_longest_length 查找所有由 int 构造的 set[] 的最大长度。它利用 build_set_from_index 为每个 0

4. 结论

在这篇文章中,我讨论了任务 1:嵌套数组,并提出了我的解决方案。我的解决方案很简单,很大程度上是根据我如何解释原始任务得出的,并强调了一顿丰盛早餐的重要性。

以上是我的 Python 语言解决方案来自《每周挑战》中的任务嵌套数组的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn