博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
462. Minimum Moves to Equal Array Elements II(python+cpp)
阅读量:3702 次
发布时间:2019-05-21

本文共 1261 字,大约阅读时间需要 4 分钟。

题目:

Given a non-empty integer array, find the minimum number of moves required to make all array elements equal, where a move is incrementing a selected element by 1 or decrementing a selected element by 1.

You may assume the array’s length is at most 10,000.
Example:

Input: [1,2,3]Output: 2Explanation: Only two moves are needed (remember each move increments or decrements one element):[1,2,3]  =>  [2,2,3]  =>  [2,2,2]

解释:

这系列的第一题:,其实给n-1个数字加1,效果等同于给那个未被选中的数字减1,所以题目转换成将所有值都转换为最小值所需要的步数。
这道题目是选择一个元素+1或者选择一个元素-1
 如果只能-1,则全部往最小值走
 如果只能+1,则全部往最大值走
 如果能+1也能-1,则全部往中间走
首先给数组排序,那么我们最终需要变成的相等的数字就是中间的数,如果数组有奇数个,那么就是最中间的那个数字;如果是偶数个,那么就是中间两个数的区间中的任意一个数字。
而两端的数字变成中间的一个数字需要的步数实际上就是两端数字的距离(设两端是AB,则需要走的步数=(B-C)+(C-A)==B-A),我们就两对两对的累加它们的差值就可以了。
~是取反的意思,但是~0==-1 ~1==-2
nums[~i] nums[i]表示取nums中对称的元素。
python代码:

class Solution(object):    def minMoves2(self, nums):        """        :type nums: List[int]        :rtype: int        """        nums.sort()        return sum([nums[~i]-nums[i] for  i in range(len(nums)/2)])

c++中如何取对称元素。

class Solution {
public: int minMoves2(vector
& nums) {
int n=nums.size(); sort(nums.begin(),nums.end()); int result=0; for (int i=0;i

总结:

按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1

转载地址:http://twmcn.baihongyu.com/

你可能感兴趣的文章
Ubuntu下BeagleBone的USB串口驱动安装 转
查看>>
STM32的PWM输入模式设置并用DMA接收数据
查看>>
windows下mongodb设置用户名密码 用python连接
查看>>
zigbee学习 示例程序SampleApp中通讯流程
查看>>
QT在linux环境下读取和设置系统时间
查看>>
单片机上使用TEA加密通信
查看>>
空间3点投影定位算法
查看>>
STM32F4的IO设置测试
查看>>
配置qt5 1 for android的环境 转载
查看>>
利用数组实现队列操作
查看>>
Linux下基于QT串口编程测试二
查看>>
Android编程 UDP客户端和TCP客户端
查看>>
ucos-ii示例3 互斥型信号量测试
查看>>
Android编程 扇形展开的悬浮菜单按钮CircularFloatingActionMenu实例
查看>>
qt中域名解析的方法
查看>>
WIN7下远程桌面控制树莓派
查看>>
linux检测网络故障以及恢复网络的方法
查看>>
android编程4 多线程编程
查看>>
zigbee协议解析 地址分配机制
查看>>
linux下视频传输测试
查看>>