网易首页 > 网易号 > 正文 申请入驻

2023-12-16:用go语言,给定整数数组arr,求删除任一元素后, 新

0
分享至

2023-12-16:用go语言,给定整数数组arr,求删除任一元素后,

新数组中长度为k的子数组累加和的最大值。

来自字节。

答案2023-12-16:

来自左程云。

灵捷3.5

大体步骤如下:

算法 maxSum1 分析:

1.计算输入数组 arr 的长度 n。

2.如果 n <= k,则返回 0。

3.初始化 ans 为 int 类型的最小值(math.MinInt32)。

4.对于每个数组元素 arr[i],执行以下步骤:

4.a.删除第 i 个元素,得到新的数组 rest。

4.b.计算新数组 rest 的长度为 k 的子数组累加和的最大值,使用函数 lenKmaxSum(rest, k)。

4.c.将 ans 更新为 ans 和 lenKmaxSum(rest, k) 中的较大值。

5.返回 ans。

算法 delete 分析:

1.计算输入数组 arr 的长度 len0,即 len(arr) - 1。

2.创建一个长度为 len0 的新数组 ans。

3.初始化索引 i 为 0。

4.对于数组 arr 的每个元素 arr[j],执行以下步骤:

4.a.如果 j 不等于给定的索引 index,则将 arr[j] 赋值给 ans[i]。

4.b.将 i 递增 1。

5.返回新数组 ans。

算法 lenKmaxSum 分析:

1.计算输入数组 arr 的长度 n。 2.初始化 ans 为 int 类型的最小值(math.MinInt32)。 3.对于每个起始位置 i,从 i 到 i + (n - k) 执行以下步骤: 3.a.初始化 cur 为 0。 3.b.对于每个元素 arr[j],从 i 开始计数,执行以下步骤,直到计数 cnt 达到 k: 3.b. i.将 arr[j] 加到 cur 中。 3.b. ii.增加计数 cnt。 3.c.将 ans 更新为 ans 和 cur 中的较大值。 4.返回 ans。

算法 maxSum2 分析:

1.计算输入数组 arr 的长度 n。

2.如果 n <= k,则返回 0。

3.创建一个长度为 n 的窗口(window)数组。

4.初始化左指针 l 和右指针 r 为 0。

5.初始化变量 sum 为 0,并使用 int64 类型存储。

6.初始化 ans 为 int 类型的最小值(math.MinInt32)。

7.对于每个索引 i,从 0 到 n-1 执行以下步骤:

7.a.当窗口不为空且窗口中最后一个元素 arr[window[r-1]] 大于等于当前元素 arr[i] 时,移动右指针 r 减小窗口大小直至条件不满足。

7.b.将当前索引 i 添加到窗口中,即 window[r] = i,并递增右指针 r。

7.c.将当前元素 arr[i] 加到 sum 中。

7.d.如果 i >= k,说明窗口大小已达到 k,执行以下步骤:

7.d. i.将 ans 更新为 ans 和 sum 减去窗口左边界元素 arr[window[l]] 的较大值。

7.d. ii.如果窗口的左边界元素 arr[window[l]] 等于 i-k,说明该元素已经不在窗口内,移动左指针 l。

7.d. iii.从 sum 中减去窗口左边界元素 arr[i-k]。

8.返回 ans。

总的时间复杂度:

  • •maxSum1 算法的时间复杂度为 O(n^2)。
  • •delete 算法的时间复杂度为 O(n)。
  • •lenKmaxSum 算法的时间复杂度为 O(n*k)。
  • •maxSum2 算法的时间复杂度为 O(n)。

总的额外空间复杂度:

  • •maxSum1 算法的额外空间复杂度为 O(n)。
  • •delete 算法的额外空间复杂度为 O(n)。
  • •lenKmaxSum 算法的额外空间复杂度为 O(1)。
  • •maxSum2 算法的额外空间复杂度为 O(n)。

go完整代码如下:

packagemain
import(
"fmt"
"math"
"math/rand"
"time"
)
funcmaxSum1(arr[]int,kint)int{
n:=len(arr)
ifn<=k{
return0
}
ans:=math.MinInt32
fori:=0;irest:=delete(arr,i)
ans=int(math.Max(float64(ans),float64(lenKmaxSum(rest,k))))
}
returnans
}
funcdelete(arr[]int,indexint)[]int{
len0:=len(arr)-1
ans:=make([]int,len0)
i:=0
forj:=0;jifj!=index{
ans[i]=arr[j]
i++
}
}
returnans
}
funclenKmaxSum(arr[]int,kint)int{
n:=len(arr)
ans:=math.MinInt32
fori:=0;i<=n-k;i++{
cur:=0
forj,cnt:=i,0;cntcur+=arr[j]
}
ans=int(math.Max(float64(ans),float64(cur)))
}
returnans
}
funcmaxSum2(arr[]int,kint)int{
n:=len(arr)
ifn<=k{
return0
}
window:=make([]int,n)
l,r:=0,0
varsumint64=0
ans:=math.MinInt32
fori:=0;iforl=arr[i]{
r--
}
window[r]=i
r++
sum+=int64(arr[i])
ifi>=k{
ans=int(math.Max(float64(ans),float64(sum-int64(arr[window[l]]))))
ifwindow[l]==i-k{
l++
}
sum-=int64(arr[i-k])
}
}
returnans
}
funcrandomArray(n,vint)[]int{
arr:=make([]int,n)
fori:=0;iarr[i]=rand.Intn(2*v+1)-v
}
returnarr
}
funcmain(){
N:=100
V:=1000
testTimes:=10000
fmt.Println("测试开始")
rand.Seed(time.Now().Unix())
fori:=0;irand.Intn(N)
n:=rand.Intn(N)+1
arr:=randomArray(n,V)
k:=rand.Intn(N)+1
ans1:=maxSum1(arr,k)
ans2:=maxSum2(arr,k)
ifans1!=ans2{
fmt.Println("出错了!")
}
}
fmt.Println("测试结束")
}



c++完整代码如下:

#include
#include
#include
#include
#include
usingnamespacestd;
intlenKmaxSum(constvector&arr,intk);
intmaxSum1(vector&arr,intk){
intn=arr.size();
if(n<=k){
return0;
}
intans=INT_MIN;
for(inti=0;ivectorrest(arr.begin(),arr.end());
rest.erase(rest.begin()+i);
ans=max(ans,lenKmaxSum(rest,k));
}
returnans;
}
intlenKmaxSum(constvector&arr,intk){
intn=arr.size();
intans=INT_MIN;
for(inti=0;i<=n-k;i++){
intcur=0;
for(intj=i,cnt=0;cntcur+=arr[j];
}
ans=max(ans,cur);
}
returnans;
}
intmaxSum2(constvector&arr,intk){
intn=arr.size();
if(n<=k){
return0;
}
vectorwindow(n);
intl=0,r=0;
longlongsum=0;
intans=INT_MIN;
for(inti=0;iwhile(l=arr[i]){
r--;
}
window[r]=i;
r++;
sum+=arr[i];
if(i>=k){
ans=max(ans,static_cast(sum-arr[window[l]]));
if(window[l]==i-k){
l++;
}
sum-=arr[i-k];
}
}
returnans;
}
voidrandomArray(vector&arr,intn,intv){
arr.resize(n);
for(inti=0;iarr[i]=rand()%(2*v+1)-v;
}
}
intmain(){
constintN=100;
constintV=1000;
constintTEST_TIMES=10000;
cout<<"测试开始"<srand(time(NULL));
for(inti=0;iintn=rand()%N+1;
vectorarr;
randomArray(arr,n,V);
intk=rand()%N+1;
intans1=maxSum1(arr,k);
intans2=maxSum2(arr,k);
if(ans1!=ans2){
cout<<"出错了!"<}
}
cout<<"测试结束"<return0;
}



c完整代码如下:

#include
#include
#include
#include
#defineint64_tlonglong
int64_tmax0(int64_ta,int64_tb){
return(a>b)?a:b;
}
int64_tlenKmaxSum(int64_t*arr,int64_tsize,int64_tk);
int64_tmaxSum1(int64_t*arr,int64_tsize,int64_tk){
if(size<=k){
return0;
}
int64_tans=LLONG_MIN;
for(int64_ti=0;iint64_t*rest=malloc((size-1)*sizeof(int64_t));
int64_trestIndex=0;
for(int64_tj=0;jif(j!=i){
rest[restIndex]=arr[j];
restIndex++;
}
}
ans=max0(ans,lenKmaxSum(rest,size-1,k));
free(rest);
}
returnans;
}
int64_tlenKmaxSum(int64_t*arr,int64_tsize,int64_tk){
int64_tans=LLONG_MIN;
for(int64_ti=0;i<=size-k;i++){
int64_tcur=0;
for(int64_tj=i,cnt=0;cntcur+=arr[j];
}
ans=max(ans,cur);
}
returnans;
}
int64_tmaxSum2(int64_t*arr,int64_tsize,int64_tk){
if(size<=k){
return0;
}
int64_t*window=malloc(size*sizeof(int64_t));
int64_tl=0,r=0;
int64_tsum=0;
int64_tans=LLONG_MIN;
for(int64_ti=0;iwhile(l=arr[i]){
r--;
}
window[r]=i;
r++;
sum+=arr[i];
if(i>=k){
ans=max0(ans,sum-arr[window[l]]);
if(window[l]==i-k){
l++;
}
sum-=arr[i-k];
}
}
free(window);
returnans;
}
voidrandomArray(int64_t*arr,int64_tsize,int64_tv){
for(int64_ti=0;iarr[i]=rand()%(2*v+1)-v;
}
}
intmain(){
constint64_tN=100;
constint64_tV=1000;
constint64_tTEST_TIMES=10000;
printf("测试开始\n");
srand(time(NULL));
for(int64_ti=0;iint64_tn=rand()%N+1;
int64_t*arr=malloc(n*sizeof(int64_t));
randomArray(arr,n,V);
int64_tk=rand()%N+1;
int64_tans1=maxSum1(arr,n,k);
int64_tans2=maxSum2(arr,n,k);
if(ans1!=ans2){
printf("出错了!\n");
}
free(arr);
}
printf("测试结束\n");
return0;
}



声明:个人原创,仅供参考

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
欧文和波神的反差,成了侠和凯各自的X因素

欧文和波神的反差,成了侠和凯各自的X因素

静易墨
2024-06-07 19:24:47
官宣!亚足联已取消拜合拉木在中泰之战的绝平球,让球迷直言意外

官宣!亚足联已取消拜合拉木在中泰之战的绝平球,让球迷直言意外

罗掌柜体育
2024-06-07 15:13:11
若国足未晋级18强赛,将通过附加赛争取最后6个亚洲杯入场券

若国足未晋级18强赛,将通过附加赛争取最后6个亚洲杯入场券

直播吧
2024-06-07 15:12:10
56票对49票,台当局“妥协”,两岸称呼已被修改,苏贞昌沉默不语

56票对49票,台当局“妥协”,两岸称呼已被修改,苏贞昌沉默不语

乡村的味道呀
2024-06-07 11:17:44
俄国很生气,宣布了三件事,但世界似乎没反应

俄国很生气,宣布了三件事,但世界似乎没反应

近距离
2024-06-07 12:42:38
曲阜:“一张网”汇聚起基层治理的“千头万绪”

曲阜:“一张网”汇聚起基层治理的“千头万绪”

央广网
2024-06-08 00:30:21
网友:深圳某地产公司三小时内开除全体员工,不做任何工作交接?

网友:深圳某地产公司三小时内开除全体员工,不做任何工作交接?

火山诗话
2024-06-07 20:37:49
7年来首次!美韩“对朝展示武力”

7年来首次!美韩“对朝展示武力”

直新闻
2024-06-05 21:51:34
梅西大度表态:皇马是最好的球队,他们是欧洲冠军,胜者为王!

梅西大度表态:皇马是最好的球队,他们是欧洲冠军,胜者为王!

风过乡
2024-06-07 18:58:36
读者集团原董事长吉西平落马,曾任庆阳市委书记

读者集团原董事长吉西平落马,曾任庆阳市委书记

澎湃新闻
2024-06-07 15:28:36
喝茶对心脏到底是好是坏?医生苦劝:4种茶,一口都不要喝

喝茶对心脏到底是好是坏?医生苦劝:4种茶,一口都不要喝

宋若讲故事
2023-01-18 21:38:26
官宣!西班牙欧洲杯名单出炉:曼城1亿先生领衔,巴萨2大天才落选

官宣!西班牙欧洲杯名单出炉:曼城1亿先生领衔,巴萨2大天才落选

阿超他的体育圈
2024-06-07 19:08:59
6月6日,刘若英被曝大瓜!

6月6日,刘若英被曝大瓜!

山野下
2024-06-06 10:02:33
国务院发文!全国医改方向定了:耗材集采、反腐…

国务院发文!全国医改方向定了:耗材集采、反腐…

医疗器械经销商联盟
2024-06-07 17:52:19
痛心!两幼儿相继在自家游泳池溺亡,一家九口人竟无一人发觉!

痛心!两幼儿相继在自家游泳池溺亡,一家九口人竟无一人发觉!

文雅笔墨
2024-06-07 23:09:39
上海己经失去了大批制造业,商店也大量关门,上海的未来在哪里?

上海己经失去了大批制造业,商店也大量关门,上海的未来在哪里?

创作者朱海平
2024-06-07 08:26:39
教育部发布2024年全国高考语文试题评析

教育部发布2024年全国高考语文试题评析

新京报
2024-06-07 14:40:07
国家发改委:不得以机械加工、铸造、铁合金等名义新增钢铁产能 严格限制高耗能低附加值钢材、生铁、焦炭等产品出口

国家发改委:不得以机械加工、铸造、铁合金等名义新增钢铁产能 严格限制高耗能低附加值钢材、生铁、焦炭等产品出口

财联社
2024-06-07 16:18:08
哪一年高考最难?2035年或迎来竞争最激烈一届,此后难度断崖式下跌

哪一年高考最难?2035年或迎来竞争最激烈一届,此后难度断崖式下跌

可达鸭面面观
2024-06-07 23:34:03
中国卫星立大功,曝美航母“挨打”后画面,美军被迫解释越描越黑

中国卫星立大功,曝美航母“挨打”后画面,美军被迫解释越描越黑

北纬的咖啡豆
2024-06-05 18:50:16
2024-06-08 02:36:49
moonfdd
moonfdd
福大大架构师每日一题
414文章数 7关注度
往期回顾 全部

科技要闻

6家大模型抢答高考作文,谁是你心中的Top1

头条要闻

拜登称"一带一路"倡议已成为令人讨厌的计划 中方回应

头条要闻

拜登称"一带一路"倡议已成为令人讨厌的计划 中方回应

体育要闻

优势在我?中国足球有自己的节奏

娱乐要闻

汤唯抵达巴黎将担任奥运火炬手

财经要闻

身陷退市股的投资者:我的钱瞬间没了

汽车要闻

2.0T混动售20.98万元起 福特蒙迪欧运动版上市

态度原创

旅游
健康
本地
教育
公开课

旅游要闻

上海迪士尼年卡最高档位卡种八折优惠改为满减

晚餐不吃or吃七分饱,哪种更减肥?

本地新闻

我和我的家乡|踏浪营口,心动不止一夏!

教育要闻

高考数学热点题型,x²+y²+z²=1,题目灵活多变

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版