首页 > 编程语言 >文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

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

时间:2023-05-19 23:13:17浏览次数:43  
标签:4.1 cur nums max len VS 文心 数组 最大

五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组。若已知 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函数用来比较两个数的大小,返回较大的那个数。

在这里插入图片描述

标签:4.1,cur,nums,max,len,VS,文心,数组,最大
From: https://www.cnblogs.com/moonfdd/p/17416538.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题
    五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始,由左至右处理,记录到目前为止已经处理过的最大子数组。若已知A[1..j]门的最大子数组,基于如下性质将解扩展为A[1..j+1]的最大子数组:A[1..j+1]的最大子数组要么是A[1..j]的最大子数组,要么是......
  • ubuntu中使用vscode进行cuda c代码debug出现 no such file or directory 的问题
    {"version":"0.2.0","configurations":[{"name":"CUDAC++:Launch","type":"cuda-gdb","request":"launch","program":......
  • libtorch教程(一)开发环境搭建:VS+libtorch和Qt+libtorch
    前言 事实上,在前面的pytorch部署博客和libtorch的QT部署中笔者已经分享了自己搭建libtorch开发环境的记录。其余并无太多要赘述的。本教程禁止转载。同时,本教程来自知识星球【CV技术指南】更多技术教程,可加入星球学习。欢迎关注公众号CV技术指南,专注于计算机视觉的技术总结、最......
  • VsCode 自动生成文件头部注释和函数注释
    1,安装插件KoroFileHeader2,配置头部注释和函数注释在vscode左下角点击设置按钮,选择“设置”,然后输入“fileheader”,{"editor.formatOnSave":true,"editor.formatOnType":true,"git.confirmSync":false,"git.autofetch":true,//文件头部注释......
  • vs code常用快捷键
    1.复制到下一行Alt+Shift+下键(上下左右的下);2.复制到上一行Alt+Shift+上键(上下左右的上);3.万能键(打开命令面板。在打开的输入框内,可以输入任何命令)Ctrl+Shift+P4.新建文件Ctrl+N5.文件之间切换Ctrl+Tab6.打开一个新的VSCode编辑器Ctrl+Shift+N7.关闭当前窗口Ctrl+W8.关闭当......
  • samba服务及vsftp服务及nfs服务简单配置
    转至:https://blog.51cto.com/rylan/19456021.建立samba共享,共享目录为/data,要求:(描述完整的过程)1)共享名为shared,工作组为magedu;2)添加组develop,添加用户gentoo,centos和ubuntu,其中gentoo和centos以develop为附加组,ubuntu不属于develop组;密码均为用户名;3)添加sa......
  • IPC、DVS、DVR、NVR、XVR
      音视频处理领域,经常遇到一些设备的名词术语。本文对IPC\DVS\DVR\NVR\XVR这些专业设备进行简单分析和区分。IPC即IP-CAMERA,是集成视频服务器和摄像机的功能为一体的数字视频设备;IP-CAMERA网络摄像机一般有内置Web服务的数字摄像机和录音设备,直接与以太网(有线、无线)相连。用......
  • macOS系统2023最佳清理软件CleanMyMac X 4.13功能介绍及如何激活解锁许可证
    CleanMyMacX4.13在软件功能列表中为MAC用户提供了常见的清理(系统垃圾、邮件附件、废纸篓)功能,还有保护(移除恶意软件、隐私)、速度(优化、维护)、应用程序(卸载器、更新程序、扩展)、文件(空间透镜、大型和旧文件、碎纸机)等功能。操作界面极其易用,例如仅需要点击几下就可以完成MAC系统的......
  • 文心大模型提示词笔记——应用场景案例
    发现:绝大多数应用场景的Prompt,质量都与使用者对“好结果”的了解成正比。1产品海报2写科普文 3写代码指定Markdown、js总结一下这几个例子·拿到应用场景后,先试着判断场景的任务特点,结合任务共性先优化一波。再结合场景主体、应用场合的特点,对生成内容的需求做一些补充说明。......
  • VScode下golang 同一个包下不同文件之间函数调用问题
    VScode下golang同一个包下不同文件之间函数调用问题1.问题发现最近在vscode上学习golang的相关开发,发现这样一个问题:同文件夹下的两个文件,在都处于main包的情况下,无法在mian()里直接调用另一个文件中的函数,会报错:undefined。2.原因分析从语法层面上似乎并无问题,但是Go中main......