查找包含集合中所有值的最短连续子数组的算法

2024-02-28

我有以下问题需要解决:

给定一组整数,例如{1,3,2},以及随机整数数组,例如

[1, 2, 2, -5, -4, 0, 1, 1, 2, 2, 0, 3,3]

找到包含集合中所有值的最短连续子数组。如果找不到子数组,则返回空数组。

Result: [1, 2, 2, 0, 3]

Or

[1, 2, 2, -5, -4, 3, 1, 1, 2, 0], {1,3,2}.

Result: [3, 1, 1, 2]

我尝试了以下方法,我的第二个循环似乎有问题。我不确定我需要改变什么:

def find_sub(l, s):
    i = 0
    counts = dict()
    end = 0
    while i < len(s):
        curr = l[end]
        if curr in s:
            if curr in counts:
                counts[curr] = counts[curr] + 1
            else:
                counts[curr] = 1
                i += 1
        end += 1
    curr_len = end

    start = 0
    for curr in l:
        if curr in counts:
            if counts[curr] == 1:
                if end < len(l):
                    next_item = l[end]
                    if next_item in counts:
                        counts[next_item] += 1
                    end += 1
            else:
                counts[curr] -= 1
                start += 1
        else:
            start += 1
    if (end - start) < curr_len:
        return l[start:end]
    else:
        return l[:curr_len]

您正在使用双指针方法,但仅移动两个索引一次 - 直到找到第一个匹配项。你应该重复move right - move left模式以获得最佳索引区间。

def find_sub(l, s):
    left = 0
    right = 0
    ac = 0
    lens = len(s)
    map = dict(zip(s, [0]*lens))
    minlen = 100000
    while left < len(l):
        while right < len(l):
            curr = l[right]
            right += 1
            if curr in s:
                c = map[curr]
                map[curr] = c + 1
                if c==0:
                    ac+=1
                    if ac == lens:
                        break
        if ac < lens:
            break

        while left < right:
            curr = l[left]
            left += 1
            if curr in s:
                c = map[curr]
                map[curr] = c - 1
                if c==1:
                    ac-=1
                    break

        if right - left + 1 < minlen:
            minlen = right - left + 1
            bestleft = left - 1
            bestright = right

    return l[bestleft:bestright]

print(find_sub([1, 2, 2, -5, -4, 3, 1, 0, 1, 2, 2, 0, 3, 3], {1,3,2}))
print(find_sub([1, 2, 2, -5, -4, 3, 1, 0, 1, 2, 2, 1, 0, 3, 3], {1,3,2}))
>>[2, -5, -4, 3, 1]
>>[2, 1, 0, 3]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

查找包含集合中所有值的最短连续子数组的算法 的相关文章

随机推荐

  • 将 postgres 函数与查询结合起来

    我目前正在努力处理结果集中需要的 sql 函数的输出 SELECT getAdditionalInfoAboutDate date from sampleCalendar 问题是 我通过以下方式得到结果 属性1 属性2 属性3 属性2 属性
  • 如何使用toggle()在jquery中设置cookie

    当用户单击链接时 寻找要设置的 cookie 它将打开 div 然后用户可以刷新页面并看到 div 仍然打开 HTML a class show settings href a jQuery function Toggle Settings
  • Oracle 中的标识符太长

    我正在尝试在 SQL Developer 中创建表 但收到此错误 错误 SQL ORA 00972 标识符太长 CREATE TABLE PACIENTE IdentificacionID number 5 TipoIdentificaci
  • 在 ASP.Net Core MVC 中使用 AJAX 提交表单

    我正在使用 ASP Net Core 2 1 并尝试在返回文件的 url 时上传文件 而不刷新页面 我正在尝试在 site js 中编写 JavaScript 因为 RenderPartial scripts 在页面末尾呈现所有脚本 因此在
  • Cassandra CQL 通配符搜索

    我有一个像这样的表结构 创建表文件 id 文本主键 fname 文本 mimetype 文本 isdir 布尔值 位置文本 在文件 位置 上创建索引 file location 表中内容如下 插入文件 id fname mimetype i
  • 将 Reactjs 连接到 Myqtthub

    您好 我对所有物联网事物都很陌生 我希望能够使用 mqtt 从 Arduino 发送和接收数据https myqtthub com https myqtthub com作为我们的经纪人 我使用以下代码进行连接 import React Co
  • 傅里叶变换+emgucv

    谁能告诉我这段代码有什么问题吗 基本上我正在尝试计算图像的 dft 并将其显示为屏幕上的图像 Image
  • 发布的歌曲 URL 是否是 Facebook 的嵌入式音乐播放器?

    我们希望我们的会员能够分享我们网站上的歌曲 并能够在 Facebook 帖子中收听这些歌曲 SoundCloud 能够做到这一点 如他们在他们的页面在这里 https www facebook com soundcloud 他们是通过成为白
  • MATLAB 中的字符串索引:单引号与双引号

    我有一个字符串矩阵 如下所示 readFiles 11221 09 11222 13 12821 06 13521 02 13522 13 13711 05 13921 01 14521 001 15712 003 它们用于以自动方式访问某
  • CUDA 使用解释器还是编译器?

    这是一个有点愚蠢的问题 但我想知道 CUDA 使用解释器还是编译器 我很想知道 因为我不太确定 CUDA 如何设法让源代码在具有不同计算能力的两张卡上运行 来自维基百科 http en wikipedia org wiki CUDA 程序员
  • 如何使用 serde_json 将“NaN”反序列化为“nan”?

    我的数据类型如下所示 derive Serialize Deserialize Debug serde rename all camelCase pub struct Matrix serde rename numColumns pub n
  • Firebase 函数返回“响应不是有效的 JSON 对象。”

    我正在尝试从以下地址发送电子邮件firebase我从我的函数调用vue应用程序 我的 firebase 函数如下所示 const functions require firebase functions const admin requir
  • 如何确保元组元素标签被保留?

    背景 我正在尝试使用带标签的元组元素将现有的重载函数替换为剩余参数 原始代码 这是原始重载函数的简化版本 function doSomething arg1 string arg2 number void function doSometh
  • 来自其他形式 VB.NET 的访问控制

    我正在 VS 2012 中开发一个有多种形式的 vb net 项目 比方说 我有一个带有 ListView 的 Form1 并且我从 Form1 调用 From2 我将此代码添加到 Form2 的 Load 事件中 Form1 ListVi
  • GitHub 中的多个分支

    我尝试使用以下说明在 github 上创建同一个第三方项目的第二个分支 https adrianshort org create multiple forks of a github repo https adrianshort org c
  • 在SQL Server 2005中,如何获取视图所依赖的其他数据库中的表?

    在 SQL Server 2008 中 对于给定数据库中的视图 我可以通过执行以下命令来获取该视图所依赖的其他数据库中的表 select distinct referenced database name referenced schema
  • 使用 spring-hateoas 使用基于 HAL 的 REST 服务

    我正在尝试使用 RestTemplate 类使用基于 HAL 的 REST 服务 响应正文如下所示 embedded school teachers name Adams state CA links self href http loca
  • 如何在 android 或 ios 移动设备上运行 Nodejs 运行时

    我正在尝试使用 Ionic Framework 为 iOS android 开发一款 chrome cast 应用程序 为此我在应用程序中需要很少的 NodeJS 包 它可以在我的桌面上运行 但我不确定它将如何在没有可用的 Node 运行时
  • Heroku Rails Rake 任务同步生产和本地数据库

    我正在尝试创建一个 rake 任务 以便我只需键入 rake db sync 即可更新我的本地数据库以匹配生产 该解决方案利用 Heroku 团队提供的代码 使用 PG 备份导入和导出 Heroku Postgres 数据库 https d
  • 查找包含集合中所有值的最短连续子数组的算法

    我有以下问题需要解决 给定一组整数 例如 1 3 2 以及随机整数数组 例如 1 2 2 5 4 0 1 1 2 2 0 3 3 找到包含集合中所有值的最短连续子数组 如果找不到子数组 则返回空数组 Result 1 2 2 0 3 Or