2023-08-28:用go语言编写。给你一个正整数数组nums, 同时给你一个长度为 m 的整数数组 queries。
第 i 个查询中,你需要将 nums 中所有元素变成 queries[i] 。你可以执行以下操作 任意 次:
将数组里一个元素 增大 或者 减小 1 。请你返回一个长度为 m 的数组 answer ,
其中 answer[i]是将 nums 中所有元素变成 queries[i] 的 最少 操作次数。
注意,每次查询后,数组变回最开始的值。
输入:nums = [3,1,6,8], queries = [1,5]。
输出:[14,10]。
来自左程云。
答案2023-08-28:
大体过程如下:
1.定义 函数,用于计算将 中的元素转换为 中每个元素所需的最少操作次数。函数接受两个参数:(正整数数组)和 (整数数组)。
2.获取 数组的长度,对 进行排序,并创建一个长度为 的 数组,用于保存从 累加得到的前缀和。
3.创建一个空的 数组,用于存储结果。
4.遍历 中的每个元素 。
5.在 函数中,使用二分查找找到 中小于 的最右位置,并将结果赋给 。
6.计算当前查询对应的最少操作次数 :
• 初始化变量 为 ,表示将小于 的元素增加到 的操作次数。
• 在 函数中,使用二分查找找到 中大于等于 的最左位置,并将结果赋给 。
• 将 更新为 ,表示将大于 的元素减小到 的操作次数。
7.将 添加到 数组中。
8.返回得到的 数组作为结果。
9.在 函数中,定义给定的 和 。
10.调用 函数,并将结果赋给 。
11.打印结果 。
总体的时间复杂度是 O(m*log(n)),其中 m 是 的长度,n 是 的长度。这是因为对于每个查询,都需要使用二分查找来找到相应的位置。
总体的空间复杂度是 O(n),其中 n 是 的长度。这是因为需要创建额外的数组 来保存前缀和。
go完整代码如下:
在这里插入图片描述rust完整代码如下:
在这里插入图片描述c++完整代码如下:
在这里插入图片描述c完整代码如下:
在这里插入图片描述
领取专属 10元无门槛券
私享最新 技术干货