文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

news2024/9/29 1:18:19

五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组。若已知 A[1…j]门的最大子数组,基于如下性质将解扩展为 A[1…j+1]的最大子数组:A[1…j+1]的最大子数组要么是A[1…j]的最大子数组,要么是某个子数组 Ai…j+1。在已知A[1…j]的最大子数组的情况下,可以在线性时间内找出形如 A[i…j+1]的最大子数组。

文心一言:

最大子数组问题是一种经典的算法问题,可以使用非递归的方法来解决。具体来说,我们可以使用一个队列来存储当前已经处理过的最大子数组,并且维护一个变量 max_len 来记录当前最大子数组的长度。同时,我们可以遍历整个数组,记录当前已经处理过的最大子数组的长度,并且在遍历的过程中更新 max_len。

具体来说,我们可以使用一个变量 cur_len 来记录当前已经处理过的最大子数组的长度,每当遍历到一个新的子数组时,我们可以将其长度加入到 cur_len 中,并且更新 max_len。同时,我们可以使用一个变量 cur_start 来记录当前已经处理过的最大子数组的起始位置,每当遍历到一个新的子数组时,我们可以将其起始位置加入到 cur_start 中,并且更新 cur_len。

最后,我们可以返回 cur_start,它是 max_len。这个值就是最大子数组中起始位置最右边的元素的下标,我们可以用它来解决最大子数组问题。

下面是一个使用 Python 实现的非递归的最大子数组问题的算法:

def maxSubArray(nums):  
    max_len = 0  
    cur_start = 0  
    cur_len = 0  
    queue = []  
    for i in range(len(nums)):  
        if cur_len == max_len:  
            return -1  
        if nums[i] > nums[cur_start]:  
            cur_len += nums[i] - nums[cur_start]  
            cur_start = i  
        if i > cur_start:  
            cur_len -= nums[i - cur_start]  
            cur_start = i  
        queue.append(cur_start)  
        cur_start += nums[i]  
    if cur_len == max_len:  
        return -1  
    return queue

这个算法的时间复杂度为 O(n),其中 n 是数组 nums 的长度。

在这里插入图片描述
在这里插入图片描述

讯飞星火:

算法步骤:

1.初始化最大子数组为整个数组的第一个元素。

2.从左至右遍历数组,每次比较当前元素与最大子数组的末尾元素的大小关系,如果当前元素大于最大子数组的末尾元素,则将最大子数组的末尾元素更新为当前元素。

3.如果遍历到数组的末尾,仍然没有找到比最大子数组更大的末尾元素,则最大子数组就是整个数组。

4.如果遍历到某个位置i时,发现A[i]大于等于最大子数组的末尾元素,并且A[i+1]也大于等于最大子数组的末尾元素,则可以将最大子数组扩展到A[i]…A[j+1],其中j+1即为扩展后的最大子数组的长度。

5.如果遍历完数组后仍未找到可以扩展的最大子数组,则返回最大子数组。

时间复杂度为O(n),空间复杂度为O(1)。

在这里插入图片描述

chatgpt:

基于上述性质,可以设计一个非递归的、线性时间的算法来解决最大子数组问题。算法的主要思路如下:

  1. 首先初始化两个变量:max_so_far和max_ending_here。它们都初始化为第一个元素。

  2. 然后从第二个元素开始遍历整个数组。对于每个元素,更新max_ending_here = max(A[i], max_ending_here + A[i]),表示包含A[i]的最大子数组。同时更新max_so_far,表示到目前位置的最大子数组。

  3. 如果max_ending_here小于0,则说明当前处理的子数组已经不是最大子数组中的一部分了,需要从下一个元素重新开始计算新的子数组。

  4. 在遍历过程中,记录下max_so_far,即可得到整个数组的最大子数组。

该算法的时间复杂度为O(n),其中n为数组的长度,因为只需要一次遍历数组即可找到最大子数组。而空间复杂度为O(1),因为只需要常数级别的额外空间来存储变量。下面是该算法的Go语言实现示例:

func maxSubArray(nums []int) int {
    if len(nums) == 0 {
        return 0
    }

    maxSoFar := nums[0]
    maxEndingHere := nums[0]

    for i := 1; i < len(nums); i++ {
        maxEndingHere = max(nums[i], maxEndingHere+nums[i])
        maxSoFar = max(maxSoFar, maxEndingHere)
    }

    return maxSoFar
}

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

其中max函数用来比较两个数的大小,返回较大的那个数。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/546067.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Squid 代理服务器

Squid概述 Squid 主要提供缓存加速、应用层过滤控制的功能。 代理的工作机制 1&#xff0e;代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2&#xff0e;将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给客户机&#xff0…

Windows安装Ubuntu双系统

Windows安装Ubuntu双系统 1.下载Ubuntu 16.04&#xff0c;地址https://releases.ubuntu.com/16.04/ 2.下载Rufus&#xff0c;地址https://rufus.ie/zh/ 3.准备U盘&#xff0c;烧录系统 4.磁盘分区 5.重启&#xff0c;按住shift键 本人电脑是联想小新 Windows11系统&#xff0…

QT上位机串口+STM32单片机项目

第一个自己的上位机小项目&#xff0c;嘿嘿&#xff0c;还是有些成绩感的。 目录 1.先看QT上位机部分 1.首先写一个页面 2.mainwindow.cpp主要函数。 2.form.cpp主要函数 3.STM32部分 1.main函数 3.QT完整代码 1.shangwei.pro 2.form.h 3.mainwindow.h 4.form.cpp …

从零入门激光SLAM(十一)——如何求解SLAM问题

大家好呀&#xff0c;我是一个SLAM方向的在读博士&#xff0c;深知SLAM学习过程一路走来的坎坷&#xff0c;也十分感谢各位大佬的优质文章和源码。随着知识的越来越多&#xff0c;越来越细&#xff0c;我准备整理一个自己的激光SLAM学习笔记专栏&#xff0c;从0带大家快速上手激…

(转载)从0开始学matlab(第9天)—第一阶段总结

1.编程实例 下面的例子将向大家介绍如何用 MATLAB 解决问题。 例1 温度转换程序 问题&#xff1a; 设计一个 MATLAB 程序&#xff0c;读取一个华氏温度的输入&#xff0c;输出开尔文温度。 答案&#xff1a; 华氏温度和开尔文温度的转换关系式可在物理学课本中找到。其关系式…

HCIP-RIP双向重发布综合实验

拓扑结构&#xff1a; 要求&#xff1a; 1、两个协议间进行多点双向重发布 2、R7的环回没有宣告在OSPF协议中&#xff0c;而是在后期重发布进入的 3、解决环路&#xff0c;所有路径选择最优&#xff0c;且存在备份 4、R2的环回要在RIP中宣告&#xff0c;R3的环回要在OSPF中宣…

如何优雅的写C#,使用Visual studio

免责声明 本人接触C#,.Net一年时间&#xff0c;本文内容基于我平时对于C#语法的积累&#xff0c;如有问题请多包涵。以下内容除了C#之外&#xff0c;还有Visual studio编译器相关的内容。 在使用C#的一年多里面&#xff0c;我发现C#的语法糖真的很不错&#xff0c;Visual Stu…

SaaS系统用户权限设计

SaaS系统用户权限设计 学习目标&#xff1a; 理解RBAC模型的基本概念及设计思路 了解SAAS-HRM中权限控制的需求及表结构分析完成组织机构的基本CRUD操作 完成用户管理的基本CRUD操作完成角色管理的基本CRUD操作 组织机构管理 需求分析 需求分析 实现企业组织结构管理&#xff0…

PCB 基础~典型的PCB设计流程,典型的PCB制造流程

典型的PCB设计流程 典型的PCB制造流程 • 从客户手中拿到Gerber&#xff0c; Drill以及其它PCB相关文件 • 准备PCB基片和薄片 – 铜箔的底片会被粘合在基材上 • 内层图像蚀刻 – 抗腐蚀的化学药水会涂在需要保留的铜箔上&#xff08;例如走线和过孔&#xff09; – 其他药水…

如何封装React无限滚动加载列表组件【含源码】

前言 由于需要考虑后端接口的性能问题&#xff0c;我们在请求业务数据列表的时候并不能直接请求全量数据。所以我们在请求数据时常见的方式是做分页查询。 对于前端交互而言&#xff0c;我们需要考虑如何优雅的让用户触发请求下一页数据的接口。常用的方法有两种&#xff1a;…

i春秋春季赛2023

只有两道逆向和一道misc&#xff0c;其他的有时间再写 wordle 不断筛有什么和没什么字母猜就行了 [6x] Guess a 5-letter word : first first [5x] Guess a 5-letter word : ideas Please enter a real English word that exists. [5x] Guess a 5-letter word : icily first…

View的基础与滑动

View的基础与滑动 1.View的基础知识 1.1View是什么 View是一种界面层的控件的一种抽象 ,我们知道的大多数控件都是直接或间接继承自View 如EditText,TextView等等 注意: EditText在compose中并没有相关控件,而是通过TextField来进行组合 Android中View本身就可以是单个控…

rt-thread启动流程(最详细教程)

资料下载 RT-Thread Simulator 例程 操作流程 将上面的仿真例程下载并解压&#xff0c;通过MDK打开&#xff0c;编译&#xff0c;调试&#xff0c;并打开串口点击运行&#xff0c;就可以看到如下输出了&#xff1a; 添加自己的 thread&#xff1a;在main()函数中添加即可&am…

【5.19】四、性能测试—流程

4.4 性能测试的流程 性能测试也遵循测试需求分析→测试计划制订→测试用例设计→测试执行→编写测试报告的基本过程&#xff0c;但在实现细节上&#xff0c;性能测试有单独一套流程&#xff1a; 1. 分析性能测试需求 在性能测试需求分析阶段&#xff0c;测试人员需要收集有关…

【AI Earth试玩】权限配置与openAPI调用工具库

前言 AI earth是阿里达摩院出的遥感云计算平台&#xff0c;我简单体验下来感觉像是GEE的python版本遥感深度学习计算平台&#xff0c;整体体验还是挺不错的&#xff0c;尤其是多分类的结果还是挺惊艳的。 平台提供工具箱和notebook两种模式&#xff0c;工具箱整个交互简单易用…

DJ 5-4 以太网 Ethernet

目录 一、以太网的物理拓扑结构 二、以太网物理层标准 1、以太网技术&#xff1a;10Base-T 和 100Base-T 2、以太网技术&#xff1a;1000Base 系列 3、曼彻斯特编码* 4、差分曼彻斯特编码机制* 三、以太网链路层控制技术 四、以太网的帧结构 1、前同步码 2、MAC 地址…

Spring Boot 项目【前后端分离】之后端实现加 LambdaQueryWrapper实现源码分析和手动模拟

目录 Spring Boot 项目【前后端分离】 之架子搭建 技术栈 实现功能03-创建Spring Boot 后端项目 需求分析/图解 思路分析 代码实现 1. 创建springboot_furn 项目 2. 修改pom.xml , 引入mybatis-plus 等相关依赖 3. 创建application.yml 配置port & 配置DB 连接信息…

【数据结构】KMP算法:计算next与nextval函数值(图解)

例&#xff1a;计算模式串"abaabcac"的KMP算法中next函数值 由函数定义 n e x t [ j ] { 0 , j 1 M a x { k ∣ 1 < k < j 且 " t 1 t 2 ⋅ ⋅ ⋅ t k − 1 " " t j − k 1 t j − k 2 ⋅ ⋅ ⋅ t j − 1 " } 1 , k 1 next[j]\left…

asp.net高校运动会管理系统的设计与实现

本高校运动会管理系统是针对我院当前运动会工作需要而开发的B/S模式的网络系统&#xff0c;涉及到运动会赛前的报名录入准备与分组编排、赛中的成绩处理、赛后的成绩汇总与团体总分的统计。它将是一个完整统一、技术先进、高效稳定、安全可靠的基于Internet/Intranet的高校运动…

一、Git安装(Git+TortoiseGit图形化)

Git 是一个开源的分布式版本控制系统&#xff0c;用于敏捷高效地处理任何或小或大的项目。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方式…