最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

文心一言 VS 訊飛星火 VS chatgpt (18)-- 算法導(dǎo)論4.1 5題

2023-05-19 22:37 作者:福大大架構(gòu)師每日一題  | 我要投稿

五、使用如下思想為最大子數(shù)組問題設(shè)計(jì)一個(gè)非遞歸的、線性時(shí)間的算法。從數(shù)組的左邊界開始,由左至右處理,記錄到目前為止已經(jīng)處理過的最大子數(shù)組。若已知 A[1..j]門的最大子數(shù)組,基于如下性質(zhì)將解擴(kuò)展為 A[1..j+1]的最大子數(shù)組:A[1..j+1]的最大子數(shù)組要么是A[1..j]的最大子數(shù)組,要么是某個(gè)子數(shù)組 Ai..j+1。在已知A[1..j]的最大子數(shù)組的情況下,可以在線性時(shí)間內(nèi)找出形如 A[i..j+1]的最大子數(shù)組。

文心一言:

最大子數(shù)組問題是一種經(jīng)典的算法問題,可以使用非遞歸的方法來解決。具體來說,我們可以使用一個(gè)隊(duì)列來存儲(chǔ)當(dāng)前已經(jīng)處理過的最大子數(shù)組,并且維護(hù)一個(gè)變量 max_len 來記錄當(dāng)前最大子數(shù)組的長(zhǎng)度。同時(shí),我們可以遍歷整個(gè)數(shù)組,記錄當(dāng)前已經(jīng)處理過的最大子數(shù)組的長(zhǎng)度,并且在遍歷的過程中更新 max_len。

具體來說,我們可以使用一個(gè)變量 cur_len 來記錄當(dāng)前已經(jīng)處理過的最大子數(shù)組的長(zhǎng)度,每當(dāng)遍歷到一個(gè)新的子數(shù)組時(shí),我們可以將其長(zhǎng)度加入到 cur_len 中,并且更新 max_len。同時(shí),我們可以使用一個(gè)變量 cur_start 來記錄當(dāng)前已經(jīng)處理過的最大子數(shù)組的起始位置,每當(dāng)遍歷到一個(gè)新的子數(shù)組時(shí),我們可以將其起始位置加入到 cur_start 中,并且更新 cur_len。

最后,我們可以返回 cur_start,它是 max_len。這個(gè)值就是最大子數(shù)組中起始位置最右邊的元素的下標(biāo),我們可以用它來解決最大子數(shù)組問題。

下面是一個(gè)使用 Python 實(shí)現(xiàn)的非遞歸的最大子數(shù)組問題的算法:

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

這個(gè)算法的時(shí)間復(fù)雜度為 O(n),其中 n 是數(shù)組 nums 的長(zhǎng)度。

圖片
在這里插入圖片描述
圖片
在這里插入圖片描述

訊飛星火:

算法步驟:

1.初始化最大子數(shù)組為整個(gè)數(shù)組的第一個(gè)元素。

2.從左至右遍歷數(shù)組,每次比較當(dāng)前元素與最大子數(shù)組的末尾元素的大小關(guān)系,如果當(dāng)前元素大于最大子數(shù)組的末尾元素,則將最大子數(shù)組的末尾元素更新為當(dāng)前元素。

3.如果遍歷到數(shù)組的末尾,仍然沒有找到比最大子數(shù)組更大的末尾元素,則最大子數(shù)組就是整個(gè)數(shù)組。

4.如果遍歷到某個(gè)位置i時(shí),發(fā)現(xiàn)A[i]大于等于最大子數(shù)組的末尾元素,并且A[i+1]也大于等于最大子數(shù)組的末尾元素,則可以將最大子數(shù)組擴(kuò)展到A[i]..A[j+1],其中j+1即為擴(kuò)展后的最大子數(shù)組的長(zhǎng)度。

5.如果遍歷完數(shù)組后仍未找到可以擴(kuò)展的最大子數(shù)組,則返回最大子數(shù)組。

時(shí)間復(fù)雜度為O(n),空間復(fù)雜度為O(1)。

圖片
在這里插入圖片描述

chatgpt:

基于上述性質(zhì),可以設(shè)計(jì)一個(gè)非遞歸的、線性時(shí)間的算法來解決最大子數(shù)組問題。算法的主要思路如下:

  1. 1.?首先初始化兩個(gè)變量:max_so_far和max_ending_here。它們都初始化為第一個(gè)元素。

  2. 2.?然后從第二個(gè)元素開始遍歷整個(gè)數(shù)組。對(duì)于每個(gè)元素,更新max_ending_here = max(A[i], max_ending_here + A[i]),表示包含A[i]的最大子數(shù)組。同時(shí)更新max_so_far,表示到目前位置的最大子數(shù)組。

  3. 3.?如果max_ending_here小于0,則說明當(dāng)前處理的子數(shù)組已經(jīng)不是最大子數(shù)組中的一部分了,需要從下一個(gè)元素重新開始計(jì)算新的子數(shù)組。

  4. 4.?在遍歷過程中,記錄下max_so_far,即可得到整個(gè)數(shù)組的最大子數(shù)組。

該算法的時(shí)間復(fù)雜度為O(n),其中n為數(shù)組的長(zhǎng)度,因?yàn)橹恍枰淮伪闅v數(shù)組即可找到最大子數(shù)組。而空間復(fù)雜度為O(1),因?yàn)橹恍枰?shù)級(jí)別的額外空間來存儲(chǔ)變量。下面是該算法的Go語言實(shí)現(xiàn)示例:

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函數(shù)用來比較兩個(gè)數(shù)的大小,返回較大的那個(gè)數(shù)。

圖片
在這里插入圖片描述

福大大架構(gòu)師每日一題

java當(dāng)死,golang當(dāng)立。最新面試題,涉及golang,rust,mysql,redis,云原生,算法,分布式,網(wǎng)絡(luò),操作系統(tǒng)。

514篇原創(chuàng)內(nèi)容

公眾號(hào)



文心一言 VS 訊飛星火 VS chatgpt (18)-- 算法導(dǎo)論4.1 5題的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
黄骅市| 沽源县| 五家渠市| 蒲城县| 华安县| 柳江县| 桓台县| 保亭| 三都| 桃园市| 治多县| 灵石县| 临江市| 鸡泽县| 开江县| 西宁市| 拉萨市| 中阳县| 宾阳县| 上思县| 定边县| 凤冈县| 大新县| 普安县| 麻江县| 含山县| 南川市| 大兴区| 宜君县| 平阳县| 偃师市| 和田县| 库车县| 奉贤区| 竹北市| 沈阳市| 丹阳市| 耒阳市| 黑水县| 鹤山市| 屏边|