笔试算法模拟题精解之“数组变换”

简介: 本题要分情况讨论,根据不同的情况变换不同的解决方式。

【在线编程产品介绍】

阿里云开发者社区在线编程:

免费刷题大神器,助你拿到好offer

周赛月赛不停歇,做题还能领奖品

大赛笔试全真题,常做常新有惊喜

点击链接开始产品体验:https://developer.aliyun.com/coding

本文为大家介绍的是“数组变换”的解法探究。先来看一下题目内容:

题目详情

等级:中等
知识点:排序、贪心
查看题目:数组变换

给出一个长度为 n 的数组,和一个正整数 d。你每次可以选择其中任意一个元素 a[i] 将其变为 a[i] + d 或 a[i] - d,这算作一次操作。

你需要将所有的元素全部变成相等元素,如果有解,请输出最小操作次数,如果无解请输出-1。
输入数字n、数字d,和一个长度为n的数组a。1 <= n <= 100000,1 <= d <= 100, 1 <= a[i] <= 100000。
输出一个数字,表示最小的操作次数,如果无解输出-1。
示例1
输入:
5
2
[3,5,7,1,9]
输出:
6
注意
最优解为全部变为5,共1 + 0 + 1 + 2 + 2 = 6次。

解题方法:

贡献者 | 猿圈

首先判断无解的情况,可以发现 a[i],a[i]+d, a[i]-d 在 模d情况下的余数不会发生改变,因此如果原数组中的存在任意两个数字它们对d取余结果不同,那么此时无解。

设余数为r。判断完无解之后,需要求出最小值。

先将数组a[i]排序,然后除以d,得到从r变成a[i]需要的步数。

枚举元素a[i],将所有元素全部变成a[i]需要考虑两部分,i之前和i之后:对于i之前的元素,假设都是r,那么需要 (i-1)*a[i],但是因为并不都是0,所有我们可以用一个变量val存放前i-1项的和,然后我们在减去val就是前i-1个元素真正需要操作的步数。

对于i之后的元素,也是类似的。我们假设i之后的所有项和为val,假设我们要将它们变为r,则消耗即为val,但是我们只需要将其变为a[i],因此需要减去(n-i)*a[i]。

看完之后是不是有了答题思路了呢,快来练练手吧:110.数组变换

b462f1d86b44481ca24c0ad63fe55948.png

相关文章
|
3天前
|
算法 数据安全/隐私保护 计算机视觉
基于二维CS-SCHT变换和LABS方法的水印嵌入和提取算法matlab仿真
该内容包括一个算法的运行展示和详细步骤,使用了MATLAB2022a。算法涉及水印嵌入和提取,利用LAB色彩空间可能用于隐藏水印。水印通过二维CS-SCHT变换、低频系数处理和特定解码策略来提取。代码段展示了水印置乱、图像处理(如噪声、旋转、剪切等攻击)以及水印的逆置乱和提取过程。最后,计算并保存了比特率,用于评估水印的稳健性。
|
4天前
|
存储 算法 Java
数据结构与算法 数组和链表
数据结构与算法 数组和链表
10 0
|
8天前
|
存储 算法
Leetcode 30天高效刷数据结构和算法 Day1 两数之和 —— 无序数组
给定一个无序整数数组和目标值,找出数组中和为目标值的两个数的下标。要求不重复且可按任意顺序返回。示例:输入nums = [2,7,11,15], target = 9,输出[0,1]。暴力解法时间复杂度O(n²),优化解法利用哈希表实现,时间复杂度O(n)。
19 0
|
13天前
|
算法 数据安全/隐私保护 计算机视觉
基于DCT变换的彩色图像双重水印嵌入和提取算法matlab仿真
**算法摘要:** - 图形展示:展示灰度与彩色图像水印应用,主辅水印嵌入。 - 软件环境:MATLAB 2022a。 - 算法原理:双重水印,转换至YCbCr/YIQ,仅影响亮度;图像分割为M×N块,DCT变换后嵌入水印。 - 流程概览:两步水印嵌入,每步对应不同图示表示。 - 核心代码未提供。
|
27天前
|
算法 JavaScript 前端开发
贪心算法】按要求补齐数组
贪心算法】按要求补齐数组
9 0
|
1月前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
20 0
|
1月前
|
算法
算法系列--两个数组的dp问题(2)(上)
算法系列--两个数组的dp问题(2)
16 0
|
1月前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
19 0
|
4天前
|
存储 算法 数据可视化
基于harris角点和RANSAC算法的图像拼接matlab仿真
本文介绍了使用MATLAB2022a进行图像拼接的流程,涉及Harris角点检测和RANSAC算法。Harris角点检测寻找图像中局部曲率变化显著的点,RANSAC则用于排除噪声和异常点,找到最佳匹配。核心程序包括自定义的Harris角点计算函数,RANSAC参数设置,以及匹配点的可视化和仿射变换矩阵计算,最终生成全景图像。
|
4天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
13 1