首页 > 其他分享 >取m和n的中位数溢出解决办法

取m和n的中位数溢出解决办法

时间:2022-10-31 16:32:43浏览次数:61  
标签:解决办法 int 相加 除以 中位数 long mid 如下 溢出


在LeetCode上刷一道二分的简单题,需要计算m和n的中位数。
通常的想法是直接如下即可:

int mid = (m + n) / 2;

然而​​mid​​​存在溢出的风险,一种简单的解决办法是把​​mid​​​的类型改成 ​​long long​​,如下

long long mid = (m + n) / 2;

但是改成​​long long​​就没意思了,如何优雅一点呢?我首先想了另一个办法,既然是相加再除以2,那除以2后再相加不就好了,即如下

int mid = m / 2 + n / 2;

这种办法看似正确,然而是存在问题的。即C++中除法固有的取整操作,设想m=5,n=1,那么按先相加再除以2的方法,得到的结果是3,而如果用先分别除以2再相加的方法,得到的结果却是2,即当m和n均为奇数时,就会出现问题。当然完全可以再判断m和n是否均为奇数然后再考虑加1,不过还有一种更简单的方法。
如下所示,假设m为较小值。

int mid = m + (n - m) / 2;


标签:解决办法,int,相加,除以,中位数,long,mid,如下,溢出
From: https://blog.51cto.com/u_15854687/5810318

相关文章