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

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums

0
分享至

2024-08-28:用go语言,给定一个从1开始、长度为n的整数数组nums,定义一个函数greaterCount(arr, val)可以返回数组arr中大于val的元素数量。

按照以下规则进行n次操作,将nums中的元素分配到两个数组arr1和arr2中:

1.第一次操作将nums[1]加入arr1。

2.第二次操作将nums[2]加入arr2。

3.对于第i次操作:

3.1.如果arr1中大于nums[i]的元素数量比arr2中大于nums[i]的元素数量多,将nums[i]加入arr1。

3.2.如果arr1中大于nums[i]的元素数量比arr2中大于nums[i]的元素数量少,将nums[i]加入arr2。

3.3.如果arr1和arr2中大于nums[i]的元素数量相等,将nums[i]加入元素数量较少的数组。

3.4.如果仍然相等,则将nums[i]加入arr1。

将arr1和arr2连接起来形成结果数组result。

要求返回整数数组result。

输入:nums = [2,1,3,3]。

输出:[2,3,1,3]。

解释:在前两次操作后,arr1 = [2] ,arr2 = [1] 。

在第 3 次操作中,两个数组中大于 3 的元素数量都是零,并且长度相等,因此,将 nums[3] 追加到 arr1 。

在第 4 次操作中,两个数组中大于 3 的元素数量都是零,但 arr2 的长度较小,因此,将 nums[4] 追加到 arr2 。

在 4 次操作后,arr1 = [2,3] ,arr2 = [1,3] 。

因此,连接形成的数组 result 是 [2,3,1,3] 。

答案2024-08-28:

chatgpt

题目来自leetcode3072。

大体步骤如下:

1.创建一个新的函数,用于计算数组中大于的元素数量。

greaterCount(arr, val)

arr

val

2.定义一个空数组和,并创建两个BinaryIndexedTree数据结构和。

arr1

arr2

tree1

tree2

3.对于数组中的每个元素:

nums

3.1. 将当前元素按照索引排序,并通过Binary Indexed Tree记录每个元素在排序后数组中的位置。

3.2. 进行前两次操作:将加入,将加入。

nums[0]

arr1

nums[1]

arr2

3.3. 从第三个元素开始遍历:

3.3.1.计算和中大于当前元素的个数,并根据规则选择将当前元素加入哪个数组,更新对应的Binary Indexed Tree。

arr1

arr2

4.返回将和连接而成的结果数组。

arr1

arr2

result

总的时间复杂度分析为O(n log n),其中n为数组的长度。

nums

总的额外空间复杂度为O(n),主要是用于存储排序后的数组、索引映射表、两个Binary Indexed Tree结构以及结果数组。

Go完整代码如下:

packagemain
import(
"fmt"
"sort"
)
typeBinaryIndexedTreestruct{
tree[]int
}
funcNewBinaryIndexedTree(nint)*BinaryIndexedTree{
return&BinaryIndexedTree{tree:make([]int,n+1)}
}
func(bit*BinaryIndexedTree)Add(iint){
foribit.tree[i]++
i+=i&-i
}
}
func(bit*BinaryIndexedTree)Get(iint)int{
sum:=0
fori>0{
sum+=bit.tree[i]
i-=i&-i
}
returnsum
}
funcresultArray(nums[]int)[]int{
n:=len(nums)
sortedNums:=make([]int,n)
copy(sortedNums,nums)
sort.Ints(sortedNums)
index:=make(map[int]int)
fori,num:=rangesortedNums{
index[num]=i+1
}
arr1,arr2:=[]int{nums[0]},[]int{nums[1]}
tree1,tree2:=NewBinaryIndexedTree(n),NewBinaryIndexedTree(n)
tree1.Add(index[nums[0]])
tree2.Add(index[nums[1]])
fori:=2;icount1:=len(arr1)-tree1.Get(index[nums[i]])
count2:=len(arr2)-tree2.Get(index[nums[i]])
ifcount1>count2||(count1==count2&&len(arr1)<=len(arr2)){
arr1=append(arr1,nums[i])
tree1.Add(index[nums[i]])
}else{
arr2=append(arr2,nums[i])
tree2.Add(index[nums[i]])
}
}
returnappend(arr1,arr2...)
}
funcmain(){
nums:=[]int{2,1,3,3}
fmt.Println(resultArray(nums))
}

rust完整代码如下:

usestd::collections::HashMap;
structBinaryIndexedTree{
tree:Vec,
}
implBinaryIndexedTree{
fnnew(n:usize)->Self{
BinaryIndexedTree{tree:vec![0;n+1]}
}
fnadd(&mutself,muti:usize){
whileiself.tree[i]+=1;
i+=i&(!i+1);
}
}
fnget(&self,muti:usize)->i32{
letmutsum=0;
whilei>0{
sum+=self.tree[i];
i-=i&(!i+1);
}
sum
}
}
fnresult_array(nums:&mutVec)->Vec{
letn=nums.len();
letmutsorted_nums=nums.clone();
sorted_nums.sort();
letmutindex=HashMap::new();
for(i,&num)insorted_nums.iter().enumerate(){
index.insert(num,i+1);
}
letmutarr1=vec![nums[0]];
letmutarr2=vec![nums[1]];
letmuttree1=BinaryIndexedTree::new(n);
letmuttree2=BinaryIndexedTree::new(n);
tree1.add(*index.get(&nums[0]).unwrap());
tree2.add(*index.get(&nums[1]).unwrap());
foriin2..n{
letcount1=arr1.len()asi32-tree1.get(*index.get(&nums[i]).unwrap());
letcount2=arr2.len()asi32-tree2.get(*index.get(&nums[i]).unwrap());
ifcount1>count2||(count1==count2&&arr1.len()<=arr2.len()){
arr1.push(nums[i]);
tree1.add(*index.get(&nums[i]).unwrap());
}else{
arr2.push(nums[i]);
tree2.add(*index.get(&nums[i]).unwrap());
}
}
letmutresult=vec![];
result.append(&mutarr1);
result.append(&mutarr2);
result
}
fnmain(){
letmutnums=vec![2,1,3,3];
println!("{:?}",result_array(&mutnums));
}

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

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

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.

相关推荐
热点推荐
伊朗最大“内鬼”被抓?革命卫队:勾结以色列,指挥官卡尼被拘!

伊朗最大“内鬼”被抓?革命卫队:勾结以色列,指挥官卡尼被拘!

青青子衿
2026-03-05 11:57:03
打疯了!东契奇首节狂轰22+5三分 生涯30次单节20+升历史第四

打疯了!东契奇首节狂轰22+5三分 生涯30次单节20+升历史第四

醉卧浮生
2026-03-07 12:13:33
伊拉克库尔德第一夫人宣言:我们不是任人驱使的炮灰!

伊拉克库尔德第一夫人宣言:我们不是任人驱使的炮灰!

胜研集
2026-03-06 13:44:23
广东一女子不愿上班常年坐街边,因长得好看被路人投喂:又懒又馋

广东一女子不愿上班常年坐街边,因长得好看被路人投喂:又懒又馋

明智家庭教育
2026-03-06 17:19:16
美以伊军事冲突最大副作用,是斩断了俄罗斯的“救命稻草”

美以伊军事冲突最大副作用,是斩断了俄罗斯的“救命稻草”

廖保平
2026-03-05 12:08:52
“不想为以色列卖命”:帝国最后的遮羞布,美式民主终成笑话

“不想为以色列卖命”:帝国最后的遮羞布,美式民主终成笑话

怪口历史的K先生
2026-03-06 15:22:51
为何关闭霍尔木兹海峡就能掐全球脖子?因为伊朗原油是全世界最好的

为何关闭霍尔木兹海峡就能掐全球脖子?因为伊朗原油是全世界最好的

风向观察
2026-03-06 21:31:15
两会不到3天,5大好消息传来!老百姓暗暗叫好:希望国家尽快落实

两会不到3天,5大好消息传来!老百姓暗暗叫好:希望国家尽快落实

谈史论天地
2026-03-07 06:54:29
1979年,张国焘冻死在养老院,许世友:除了主席,没人是他的对手

1979年,张国焘冻死在养老院,许世友:除了主席,没人是他的对手

文史季季红
2026-03-05 13:35:03
写入教科书的一天:F-35在德黑兰完成全球首次实战空对空击杀

写入教科书的一天:F-35在德黑兰完成全球首次实战空对空击杀

斌闻天下
2026-03-06 07:30:03
伊方:因美以袭击丧生的伊朗人三成为青少年

伊方:因美以袭击丧生的伊朗人三成为青少年

环球网资讯
2026-03-07 06:39:29
为什么美国的华人华裔地位那么低 网友从各方面分析 真就那样

为什么美国的华人华裔地位那么低 网友从各方面分析 真就那样

侃神评故事
2026-03-06 07:10:03
我包养过一个女大学生,七年花了一千多万

我包养过一个女大学生,七年花了一千多万

烟火人间故事汇
2026-03-06 23:05:03
性压抑已经变态至此了?

性压抑已经变态至此了?

黯泉
2026-03-07 11:28:43
萝莉岛,是进入核心圈层的投名状,你猜他们为什么都穿红皮鞋

萝莉岛,是进入核心圈层的投名状,你猜他们为什么都穿红皮鞋

百晓生谈历史
2026-03-05 22:00:08
一份“煮熟的三文鱼”火了,原来低认知的家长,真能搞出人命!

一份“煮熟的三文鱼”火了,原来低认知的家长,真能搞出人命!

妍妍教育日记
2026-03-07 08:45:06
伊朗万万没想到,自家王牌武器遭到破解,美军多了一张底牌

伊朗万万没想到,自家王牌武器遭到破解,美军多了一张底牌

空天力量
2026-03-06 13:09:18
上次被发现还是1911年!上海宝山惊现1只,专家:可能是坐船来的

上次被发现还是1911年!上海宝山惊现1只,专家:可能是坐船来的

万象硬核本尊
2026-03-06 23:54:22
女子实名举报某团外卖:不上大额券就让我变成“凌晨营业”,你们真黑!

女子实名举报某团外卖:不上大额券就让我变成“凌晨营业”,你们真黑!

回旋镖
2026-03-06 21:13:59
塔图姆复出15分12板7助攻凯尔特人大胜独行侠,布朗24分7板7助

塔图姆复出15分12板7助攻凯尔特人大胜独行侠,布朗24分7板7助

湖人崛起
2026-03-07 10:25:09
2026-03-07 13:43:00
moonfdd incentive-icons
moonfdd
福大大架构师每日一题
1143文章数 58关注度
往期回顾 全部

科技要闻

OpenClaw爆火,六位"养虾人"自述与AI共生

头条要闻

特朗普突然放话"先解决伊朗后解决古巴" 梅西听懵了

头条要闻

特朗普突然放话"先解决伊朗后解决古巴" 梅西听懵了

体育要闻

塔图姆归来:凯尔特人的春之绿

娱乐要闻

周杰伦田馥甄的“JH恋” 被扒得底朝天

财经要闻

针对"不敢休、不让休"怪圈 国家出手了

汽车要闻

逃离ICU,上汽通用“止血”企稳

态度原创

时尚
家居
亲子
旅游
数码

这些才是适合普通人的穿搭!搭配腰带、多穿牛仔裤,简单舒适

家居要闻

暖棕撞色 轻法奶油风

亲子要闻

六个月宝宝查出散光,原因竟是父母长期身旁玩手机,妈妈懵了:我一直以为他闭着眼就没事

旅游要闻

文旅部部长:7名外国游客到上海旅游,买了40箱货;“成为中国人”成了热词

数码要闻

苹果M5 Pro芯片GeekBench跑分曝光:多核破2.8万

无障碍浏览 进入关怀版