当前位置: 面试刷题>> 使数组元素相同的最少步数Ⅰ (经典算法题500道)


### 题目描述 给定一个非空整数数组 `nums`,数组的每一个元素代表一个房间中的初始温度。你可以执行一个操作,将某个房间的温度增加 1 或减少 1。目标是让所有房间的温度相同。请问,你最少需要执行多少次操作来达到这个目标? ### 示例 **输入**:`nums = [1, 2, 3]` **输出**:3 **解释**:你可以将第一个房间的温度从 1 增加到 2,第二个房间的温度不变,第三个房间的温度从 3 减少到 2。这样,所有房间的温度都相同,共执行了 3 次操作。 ### 解题思路 1. **寻找中位数**:为了使得所有元素相等,最优的策略是将所有元素变为中位数,因为中位数到数组中任意其他元素的距离(差的绝对值之和)最小。 2. **计算操作次数**:遍历数组,计算每个元素与中位数的差的绝对值之和,即为所需的最少操作次数。 ### PHP 代码示例 ```php function minMoves($nums) { sort($nums); // 对数组进行排序 $median = $nums[floor(count($nums) / 2)]; // 找到中位数 $moves = 0; foreach ($nums as $num) { $moves += abs($num - $median); // 累加每个元素与中位数的差的绝对值 } return $moves; } // 示例用法 $nums = [1, 2, 3]; echo minMoves($nums); // 输出 3 ``` ### Python 代码示例 ```python def minMoves(nums): nums.sort() # 对数组进行排序 median = nums[len(nums) // 2] # 找到中位数 moves = sum(abs(num - median) for num in nums) # 计算所有元素与中位数的差的绝对值之和 return moves # 示例用法 nums = [1, 2, 3] print(minMoves(nums)) # 输出 3 ``` ### JavaScript 代码示例 ```javascript function minMoves(nums) { nums.sort((a, b) => a - b); // 对数组进行排序 const median = nums[Math.floor(nums.length / 2)]; // 找到中位数 let moves = 0; for (let num of nums) { moves += Math.abs(num - median); // 累加每个元素与中位数的差的绝对值 } return moves; } // 示例用法 const nums = [1, 2, 3]; console.log(minMoves(nums)); // 输出 3 ``` **码小课网站中有更多相关内容分享给大家学习**,包括算法基础、数据结构、面试题解析等,欢迎访问并深入学习。
推荐面试题