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

2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1

0
分享至

2023-10-18:用go语言,给定一个数组arr,长度为n,表示有0~n-1号设备,

arr[i]表示i号设备的型号,型号的种类从0~k-1,一共k种型号,

给定一个k*k的矩阵map,来表示型号之间的兼容情况,

map[a][b] == 1,表示a型号兼容b型号,

map[a][b] == 0,表示a型号不兼容b型号,

兼容关系是有向图,也就是a型号兼容b型号,不代表b型号同时兼容a型号,

如果i设备的型号兼容j设备的型号,那么可以从i设备修建一条去往j设备的线路,

修建线路的代价是i设备到j设备的距离:|i-j|,

你的目标是从0号设备到达n-1号设备,并不一定每个设备都联通,只需要到达即可。

返回最小的修建代价,如果就是无法到达返回-1。

1 <= n <= 1000,

1 <= k <= 50。

来自招商银行。

来自左程云。

答案2023-10-18:

大体步骤:

1.创建一个二维切片,长度为,用于记录每个型号的设备编号。

own

k

2.创建一个二维切片,长度为,用于记录每个型号兼容的下一个型号。

nexts

k

3.遍历数组,将每个设备的编号添加到对应型号的中。

arr

own

4.遍历兼容矩阵,将每个型号兼容的下一个型号添加到对应型号的中。

m

nexts

5.创建一个二叉堆,并定义排序函数,按照修建代价升序排列。

heap

6.将起始设备添加到堆中,表示从 0 号设备开始,修建代价为 0。

(0, 0)

7.创建一个长度为的布尔型切片,用于标记设备是否被访问过。

n

visited

8.当堆不为空时,进行以下操作:

  • •弹出堆顶元素,表示当前位置和当前的修建代价。
  • t
  • •获取当前位置的设备编号和修建代价。
  • cur
  • •如果当前位置为目标位置,则返回当前的修建代价。
  • n-1
  • •将当前位置标记为已访问。

9.获取当前设备的型号。

model

10.遍历下一个兼容的型号,以及拥有下一个型号的设备位置:

nextModel

nextModel

nextPosition

-如果设备位置未被访问过,则将`(nextPosition,cost+abs(nextPosition,position))`添加到堆中。

11.如果无法到达目标位置,返回 -1。

12.在函数中调用函数,并输出结果。

main

minCost

总的时间复杂度为 $O(nk^2logn)$,其中 n 是设备数量,k 是型号数量。遍历拥有型号的设备位置的过程复杂度为 O(n),堆操作的复杂度为 O(logn),遍历所有可能的型号和设备位置的复杂度为 $O(k^2$),所以总的时间复杂度为 $O(nk^2logn)$。

总的额外空间复杂度为 O(n),其中 n 是设备数量。需要额外的空间来存储、、和堆,它们的空间复杂度都为 O(n)。

own

nexts

visited

heap

go完整代码如下:

packagemain
import(
"fmt"
"github.com/emirpasic/gods/trees/binaryheap"
)
funcminCost(arr[]int,m[][]int,nint,kint)int{
//0:{4,7,13,26}
//1:{5,45,3,17}
own:=make([][]int,k)
nexts:=make([][]int,k)
fori:=0;iown[i]=[]int{}
nexts[i]=[]int{}
}
fori:=0;iown[arr[i]]=append(own[arr[i]],i)
}
fori:=0;iforj:=0;jifm[i][j]==1{
nexts[i]=append(nexts[i],j)
}
}
}
heap:=binaryheap.NewWith(func(a,binterface{})int{
returna.([]int)[1]-b.([]int)[1]
})
heap.Push([]int{0,0})
visited:=make([]bool,n)
forheap.Size()>0{
t,_:=heap.Pop()
cur:=t.([]int)
position:=cur[0]
cost:=cur[1]
if!visited[position]{
visited[position]=true
ifposition==n-1{
returncost
}
model:=arr[position]
for_,nextModel:=rangenexts[model]{
for_,nextPosition:=rangeown[nextModel]{
if!visited[nextPosition]{
heap.Push([]int{nextPosition,cost+abs(nextPosition,position)})
}
}
}
}
}
return-1
}
funcabs(a,bint)int{
ifa-b<0{
returnb-a
}
returna-b
}
funcmain(){
arr:=[]int{0,1,2,3}
m:=[][]int{{0,1,0,1,0},{1,0,1,1,0},{2,1,1,1,1},{3,0,0,0,0}}
n:=4
k:=4
result:=minCost(arr,m,n,k)
fmt.Println(result)
}

rust完整代码如下:

usestd::cmp::Reverse;
usestd::collections::BinaryHeap;
fnmin_cost(arr:&[i32],map:&[Vec],n:usize,k:usize)->i32{
letmutown:Vec>=vec![Vec::new();k];
letmutnexts:Vec>=vec![Vec::new();k];
for(i,&value)inarr.iter().enumerate(){
own[valueasusize].push(iasi32);
}
for(i,row)inmap.iter().enumerate(){
for(j,&value)inrow.iter().enumerate(){
ifvalue==1{
nexts[iasusize].push(jasi32);
}
}
}
letmutheap:BinaryHeap<(i32,i32)>=BinaryHeap::new();
heap.push((0,0));
letmutvisited:Vec=vec![false;n];
whileletSome((position,cost))=heap.pop(){
letposition=positionasusize;
letcost=cost;
if!visited[position]{
visited[position]=true;
ifposition==n-1{
returncost;
}
letmodel=arr[position]asusize;
for&next_modelin&nexts[model]{
for&next_positionin&own[next_modelasusize]{
if!visited[next_positionasusize]{
heap.push((
next_position,
cost+(next_position-positionasi32).abs(),
));
}
}
}
}
}
-1
}
fnmain(){
letarr=[0,1,2,3];
letm=[
vec![0,1,0,1,0],
vec![1,0,1,1,0],
vec![2,1,1,1,1],
vec![3,0,0,0,0],
];
letn=4;
letk=4;
letresult=min_cost(&arr,&m,n,k);
println!("MinimumCost:{}",result);
}

c++完整代码如下:

#include
#include
#include
#include
usingnamespacestd;
intminCost(vector&arr,vector>&map,intn,intk){
vector>own(k);
vector>nexts(k);
for(inti=0;iown[arr[i]].push_back(i);
}
for(inti=0;ifor(intj=0;jif(map[i][j]==1){
nexts[i].push_back(j);
}
}
}
priority_queue,vector>,greater>>heap;
heap.push({0,0});
vectorvisited(n,false);
while(!heap.empty()){
vectorcur=heap.top();
heap.pop();
intposition=cur[0];
intcost=cur[1];
if(!visited[position]){
visited[position]=true;
if(position==n-1){
returncost;
}
intmodel=arr[position];
for(intnextModel:nexts[model]){
for(intnextPosition:own[nextModel]){
if(!visited[nextPosition]){
heap.push({nextPosition,cost+abs(nextPosition-position)});
}
}
}
}
}
return-1;
}
intmain(){
vectorarr={0,1,2,3};
vector>m={{0,1,0,1,0},{1,0,1,1,0},{2,1,1,1,1},{3,0,0,0,0}};
intn=4;
intk=4;
intresult=minCost(arr,m,n,k);
cout<
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.

相关推荐
热点推荐
2局才2分!朱婷李盈莹打疯了,女排巨星却崩盘,蔡斌固执拒绝换人

2局才2分!朱婷李盈莹打疯了,女排巨星却崩盘,蔡斌固执拒绝换人

嘴炮体坛
2024-06-14 21:32:30
管姚:欧盟的“政治把戏”,和中国的“反制工具箱”

管姚:欧盟的“政治把戏”,和中国的“反制工具箱”

直新闻
2024-06-13 22:57:04
江苏17岁中专生姜萍遭各大名校疯抢,读中专原因曝光:与家庭有关

江苏17岁中专生姜萍遭各大名校疯抢,读中专原因曝光:与家庭有关

180°视角
2024-06-14 14:14:21
银行高管被控受贿、家属花450万“运作”未果,起诉追款一审被驳回

银行高管被控受贿、家属花450万“运作”未果,起诉追款一审被驳回

澎湃新闻
2024-06-14 18:42:33
马斯克发动aoe隐藏点赞,网友怨声载道

马斯克发动aoe隐藏点赞,网友怨声载道

老郭在学习
2024-06-14 17:59:32
印尼发生罕见事故,45岁妇女被6米蟒蛇活吞,丈夫带人杀蟒寻尸

印尼发生罕见事故,45岁妇女被6米蟒蛇活吞,丈夫带人杀蟒寻尸

社会酱
2024-06-14 17:19:12
3-0!中国女排横扫德国夺两连胜,朱婷成万花筒,王媛媛拦网建功

3-0!中国女排横扫德国夺两连胜,朱婷成万花筒,王媛媛拦网建功

体坛纪录片
2024-06-14 21:53:51
刘和平:欧盟对华抡起贸易大棒 少不了美国怂恿

刘和平:欧盟对华抡起贸易大棒 少不了美国怂恿

直新闻
2024-06-14 22:21:06
第一次性生活有多痛?进不去怎么办

第一次性生活有多痛?进不去怎么办

喜马拉雅主播暮霭
2024-06-12 09:53:49
网传临时搬运工的招聘信息,一天工作15个小时工资80,上厕所时间一天三次违者罚500

网传临时搬运工的招聘信息,一天工作15个小时工资80,上厕所时间一天三次违者罚500

可达鸭面面观
2024-06-14 22:16:19
卫健委的倡议,何故引来群嘲?

卫健委的倡议,何故引来群嘲?

林孤小姐
2024-06-14 14:04:23
银行副行长误将女员工表白视频群发,两人相差20岁,官方发声力挺

银行副行长误将女员工表白视频群发,两人相差20岁,官方发声力挺

求实者
2024-06-14 22:18:32
国足刚进18强赛,西甲球队就跟中国男足门神官宣签约,伊万乐开花

国足刚进18强赛,西甲球队就跟中国男足门神官宣签约,伊万乐开花

评球论事
2024-06-14 20:04:26
距和平峰会只剩1天,15国退出了,泽连斯基意识到对中国说错了话

距和平峰会只剩1天,15国退出了,泽连斯基意识到对中国说错了话

莫将离
2024-06-14 22:28:53
又一家大型银行轰然倒塌!富豪资金一夜清零,我们的钱还安全吗?

又一家大型银行轰然倒塌!富豪资金一夜清零,我们的钱还安全吗?

趣说世界哈
2024-06-14 23:33:52
土耳其宣布对我国燃油及混合动力乘用车征收40%额外进口关税 ,商务部:最终必定得不偿失

土耳其宣布对我国燃油及混合动力乘用车征收40%额外进口关税 ,商务部:最终必定得不偿失

每日经济新闻
2024-06-14 15:39:11
日媒:伊藤洋辉加盟拜仁后年薪为10亿日元,创日本球员纪录

日媒:伊藤洋辉加盟拜仁后年薪为10亿日元,创日本球员纪录

直播吧
2024-06-14 13:10:22
巴黎奥运会,女排12支参赛球队全部出炉

巴黎奥运会,女排12支参赛球队全部出炉

体育哲人
2024-06-14 19:53:26
小牌大耍!女星周也黑脸对待央视记者,“六公主”直接晒视频明涵

小牌大耍!女星周也黑脸对待央视记者,“六公主”直接晒视频明涵

萌神木木
2024-06-14 18:09:04
直击河南抗旱:“越是种上的越着急”,种粮大户直言“需要水啊”

直击河南抗旱:“越是种上的越着急”,种粮大户直言“需要水啊”

澎湃新闻
2024-06-14 20:52:28
2024-06-15 06:34:44
moonfdd
moonfdd
福大大架构师每日一题
422文章数 7关注度
往期回顾 全部

科技要闻

马斯克重获信任 豪言特斯拉市值超10个苹果

头条要闻

欧洲杯-维尔茨斩首球哈弗茨破门 德国5-1苏格兰

头条要闻

欧洲杯-维尔茨斩首球哈弗茨破门 德国5-1苏格兰

体育要闻

我们为什么还爱欧洲杯?

娱乐要闻

江宏杰秀儿女刺青,不怕刺激福原爱?

财经要闻

“石油美元”协议走向终结 影响几何?

汽车要闻

提供100/240kW双电机版本车型 乐道L60实车曝光

态度原创

本地
游戏
艺术
房产
公开课

本地新闻

粽情一夏|海河龙舟赛,竟然成了外国人的大party!

《活侠传》Steam多半差评 存档有问题

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

房产要闻

万华对面!海口今年首宗超百亩宅地,重磅挂出!

公开课

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

无障碍浏览 进入关怀版