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

news/2024/9/22 4:28:04/文章来源:https://www.cnblogs.com/moonfdd/p/18384530

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.定义一个空数组arr1arr2,并创建两个BinaryIndexedTree数据结构tree1tree2

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

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

3.2. 进行前两次操作:将nums[0]加入arr1,将nums[1]加入arr2

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

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

4.返回将arr1arr2连接而成的结果数组result

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

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

Go完整代码如下:

package mainimport ("fmt""sort"
)type BinaryIndexedTree struct {tree []int
}func NewBinaryIndexedTree(n int) *BinaryIndexedTree {return &BinaryIndexedTree{tree: make([]int, n+1)}
}func (bit *BinaryIndexedTree) Add(i int) {for i < len(bit.tree) {bit.tree[i]++i += i & -i}
}func (bit *BinaryIndexedTree) Get(i int) int {sum := 0for i > 0 {sum += bit.tree[i]i -= i & -i}return sum
}func resultArray(nums []int) []int {n := len(nums)sortedNums := make([]int, n)copy(sortedNums, nums)sort.Ints(sortedNums)index := make(map[int]int)for i, num := range sortedNums {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]])for i := 2; i < n; i++ {count1 := len(arr1) - tree1.Get(index[nums[i]])count2 := len(arr2) - tree2.Get(index[nums[i]])if count1 > 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]])}}return append(arr1, arr2...)
}func main() {nums := []int{2, 1, 3, 3}fmt.Println(resultArray(nums))
}

在这里插入图片描述

rust完整代码如下:

use std::collections::HashMap;struct BinaryIndexedTree {tree: Vec<i32>,
}impl BinaryIndexedTree {fn new(n: usize) -> Self {BinaryIndexedTree { tree: vec![0; n+1] }}fn add(&mut self, mut i: usize) {while i < self.tree.len() {self.tree[i] += 1;i += i & (!i + 1);}}fn get(&self, mut i: usize) -> i32 {let mut sum = 0;while i > 0 {sum += self.tree[i];i -= i & (!i + 1);}sum}
}fn result_array(nums: &mut Vec<i32>) -> Vec<i32> {let n = nums.len();let mut sorted_nums = nums.clone();sorted_nums.sort();let mut index = HashMap::new();for (i, &num) in sorted_nums.iter().enumerate() {index.insert(num, i + 1);}let mut arr1 = vec![nums[0]];let mut arr2 = vec![nums[1]];let mut tree1 = BinaryIndexedTree::new(n);let mut tree2 = BinaryIndexedTree::new(n);tree1.add(*index.get(&nums[0]).unwrap());tree2.add(*index.get(&nums[1]).unwrap());for i in 2..n {let count1 = arr1.len() as i32 - tree1.get(*index.get(&nums[i]).unwrap());let count2 = arr2.len() as i32 - tree2.get(*index.get(&nums[i]).unwrap());if count1 > 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());}}let mut result = vec![];result.append(&mut arr1);result.append(&mut arr2);result
}fn main() {let mut nums = vec![2, 1, 3, 3];println!("{:?}", result_array(&mut nums));
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/788530.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPF 如何利用Blend给Button添加波纹效果

先看一下效果吧:如果不会写动画或者懒得写动画,就直接交给Blend来做吧; 其实Blend操作起来很简单,有点类似于在操作PS,我们只需要设置关键帧,鼠标点来点去就可以了,Blend会自动帮我们生成我们想要的动画效果. 第一步:要创建一个空的WPF项目 第二步:右键我们的项目,在最…

绘制ply模型顶点的法线(通过两点)

import trimesh import matplotlib.pyplot as plt# 读取点云文件 mesh = trimesh.load_mesh(test.ply)# 计算法线 mesh.vertex_normals# 创建一个新的图形窗口 fig = plt.figure() ax = fig.add_subplot(111, projection=3d)# 绘制顶点 ax.scatter(mesh.vertices[:, 0], mesh.v…

HandyControl 初识 第一次正确引入

在 App.xaml配置HandyControl,一个是皮肤资源,一个是主题资源 完整代码: ` <Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/HandyControl;component/Th…

信息熵计算程序[Python+CSV格式数据集]

0 前言为了便于学习决策树信息熵相关知识,笔者编写了一个专门用于计算变量信息熵、条件熵、信息增益、信息增益比的程序,方便提升学习效率。 程序中包含了计算过程的数据和详细信息以及最终计算结果。 编程语言为Python,搭配CSV数据格式使用。1 数据集 1.1 游玩数据集 根据天…

【整理】 【Windows系列】Windows安全日志分析实战:关键事件+详解

参考🔗: https://mp.weixin.qq.com/s?__biz=MzI5MjY4MTMyMQ==&mid=2247485189&idx=1&sn=f97aca178ab188d35e3182bf89ddf4dc&chksm=ec7ce403db0b6d151ee60369468e79229d8d3a264edb2967d7bd2ecdcd69e93af2abfb68dd1c&cur_album_id=3541179802739621890&a…

【ROS教程】ROS文件系统和基础架构

@目录1.工作空间目录1.1 package.xml2.启动节点的方式2.1 一次启动一个2.2 一次启动多个3.ROS常用命令3.1 增3.2 查3.3 执行3.3.1 加载环境变量3.3.2 运行节点3.4 查看计算图4.创建功能包4.1 选择工作目录4.2 创建功能包目录4.3 建立功能包1.工作空间目录WorkSpace --- 自定义的…

沉浸式体验吸尘器产品的3D可视化盛宴

在这个科技日新月异的时代,每一个细微之处都蕴含着创新的火花,而家居清洁作为我们日常生活中不可或缺的一环,也正在经历一场前所未有的变革。大家可以想象一下,无需亲临实体店,只需轻点鼠标或滑动屏幕,一款款精心设计的吸尘器便以3D形态跃然眼前,仿佛触手可及。这不仅仅…

Valid注解

文章链接地址:https://blog.csdn.net/m0_58680865/article/details/127817779文章目录前言 一、@Valid注解1、源码解析 2、所属的包 3、参数校验使用注解(1)空校验 (2)Boolean校验 (3)长度校验 (4)日期校验 (5)数值校验 (6)其他校验4、具体使用使用 @Valid 进行参…

【ACMMM2024】Multi-Scale and Detail-Enhanced Segment Anything Model for Salient Object Detection

论文:https://arxiv.org/pdf/2408.04326 代码:https://github.com/BellyBeauty/MDSAM论文的研究动机就是使用SAM来解决显著性检测(SOD)问题,主要有两个改进:提出了Lightweight Multi-Scale Adapter, LMSA来微调SAM 提出了Multi-Level Fusion Module, MLFM 和 Detail Enha…

Amazon Bedrock 实践:零基础创建贪吃蛇游戏

本文探讨了如何利用 Amazon Bedrock 和大型语言模型,快速创建经典的贪吃蛇游戏原型代码。重点展示了利用提示工程,将创新想法高效转化为可运行代码方面的过程。文章还介绍了评估和优化提示词质量的最佳实践。亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有…

题解:P11000 [蓝桥杯 2024 省 Python B] 数字串个数

P1100,纪念这个特别的数字,来水一篇。用 \(1 \sim 9\) 没有任何特殊情况的方法数:\(9^{10000}\)。 排除没有 \(3\) 和 \(7\) 的方法。 \(9^{10000} - 8^{10000} - 8^{10000}\) 加上 \(3\) 和 \(7\) 混一起的方法数。 \(9^{10000} - {(9 - 1)}^{10000} - {(9 - 1)}^{10000} +…

【音视频通话】使用asp.net core 8+vue3 实现高效音视频通话

引言在三年前,写智能小车的时候,当时小车上有一个摄像头需要采集,实现推拉流的操作,技术选型当时第一版用的是nginx的rtmp的推拉流,服务器的配置环境是centos,2H4G3M的一个配置,nginx的rtmp的延迟是20秒,超慢,后来研究了SRS以及ZLMediaKit这两个开源的推拉流服务器,没…