简单的一个函数的优化

Yofoo 2010-03-11 09:25:30

int GetNear(int l, int r, int v)
{
if(abs(v-l) < abs(v-r))
return l;

return r;
}


以上代码是从两个数l, r中找出与v最近的一个数, 希望能优化...
...全文
227 23 打赏 收藏 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
wwwxhb 2010-03-11
  • 打赏
  • 举报
回复
.............
dubiousway 2010-03-11
  • 打赏
  • 举报
回复
inline int GetNear(int l, int r, int v)
dubiousway 2010-03-11
  • 打赏
  • 举报
回复
莫忘了 inline:

int    GetNear(int l, int r, int v)


haha
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
楼主代码中,两个abs各有一个if跳转,再加上本身一个,一共三个。

引用 14 楼 sigoyi 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:C/C++ codeint GetNear(int a,int b,int v) {int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv; }

我也是凑个热闹,不图别地,图个学。你说的三个if是为什么?能不能给解释一下,学生头脑简单不明白你说的三个if指的是什么?
WizardK 2010-03-11
  • 打赏
  • 举报
回复
引用 10 楼 liumenghappy 的回复:
C/C++ codeint GetNear(int l,int r,int v)
{if((v-l)*(v-l)< (v-r)*(v-r))return l;return r;
}
我乱写的,不知道取绝对值和平方哪个快些


当然是加减运算最快,一次乘等于N次加,LZ别折磨我们了。。。
SiGoYi 2010-03-11
  • 打赏
  • 举报
回复
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:C/C++ codeint GetNear(int a,int b,int v) {int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv; }


我也是凑个热闹,不图别地,图个学。你说的三个if是为什么?能不能给解释一下,学生头脑简单不明白你说的三个if指的是什么?
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
我没有好想法。

引用 12 楼 wizardk 的回复:
引用 11 楼 m_s_d_n 的回复:
你比楼主的代码还多了个除法,虽然这个除法应该会被优化。

引用 9 楼 wizardk 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}

唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹

是的,都说了,凑热闹,你有什么好想法说说呗
WizardK 2010-03-11
  • 打赏
  • 举报
回复
引用 11 楼 m_s_d_n 的回复:
你比楼主的代码还多了个除法,虽然这个除法应该会被优化。

引用 9 楼 wizardk 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}

唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹


是的,都说了,凑热闹,你有什么好想法说说呗
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
你比楼主的代码还多了个除法,虽然这个除法应该会被优化。

引用 9 楼 wizardk 的回复:
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}

唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹
liumenghappy 2010-03-11
  • 打赏
  • 举报
回复

int GetNear(int l, int r, int v)
{ if((v-l)*(v-l) < (v-r)*(v-r))
return l;
return r;
}

我乱写的,不知道取绝对值和平方哪个快些
WizardK 2010-03-11
  • 打赏
  • 举报
回复
引用 8 楼 m_s_d_n 的回复:
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}


唉,换个思路而已嘛,LZ是按照距离的方式,我是按照中心点的方式,LZ的代码效率已经很高了,我就是凑个热闹
M_S_D_N 2010-03-11
  • 打赏
  • 举报
回复
楼主原代码里用了三个if,你也用了3个if,有啥优化的?

引用 3 楼 wizardk 的回复:
C/C++ codeint GetNear(int a,int b,int v)
{int maxv= max(a, b);int minv= min(a, b);return (maxv- minv)/2)> v? minv : maxv;
}
SiGoYi 2010-03-11
  • 打赏
  • 举报
回复
int GetNear(int l, int r, int v)
{
return abs(v-l) < abs(v-r)? l : r;
}
bragi523 2010-03-11
  • 打赏
  • 举报
回复
已经很简了吧
SiGoYi 2010-03-11
  • 打赏
  • 举报
回复
LZ的方法已经很优化了。
SuperLy 2010-03-11
  • 打赏
  • 举报
回复
int GetNear(int l, int r, int v)
{
if(v*2<(l+r))
return l;

return r;
}
WizardK 2010-03-11
  • 打赏
  • 举报
回复

int GetNear(int a, int b, int v)
{
int maxv = max(a, b);
int minv = min(a, b);

return (maxv - minv) / 2) > v ? minv : maxv;
}
jiuchang 2010-03-11
  • 打赏
  • 举报
回复
1楼不对吧,没有说三个参数的大小关系啊
jieleiping 2010-03-11
  • 打赏
  • 举报
回复

int GetNear(int l, int r, int v)
{
if(v<((l+r)/2))
return l;

return r;
}

jiuchang 2010-03-11
  • 打赏
  • 举报
回复
a < v, b < v return a < b ? b : a
a > v, b > v return a < b ? a : b
a < v, b > v return v-a < b-v ? a: b
a > v, b < v return a-v < v-b ? a : b

前两种情况不需要做减法运算,可以优化掉
加载更多回复(3)
源码直接下载地址: https://pan.quark.cn/s/16bcccbbec7f ### 使用ADB工具进行免Root系统应用冻结 在安卓设备的日常操作过程中,用户常常会碰到一些非必要的系统级程序,这些程序不仅会占用设备的存储容量,还可能在后台执行从而消耗电力资源。对于那些追求卓越性能或延长电池使用时间的用户而言,如何妥善处理这些预装程序成为一个关键问题。本文将系统阐述借助ADB(Android Debug Bridge)工具达成免Root状态下隐藏(冻结)系统级应用的目的,从而实现节省电力的目标。 #### 一、前期准备 1. **确认电脑端安装ADB工具**:ADB是由Google开发的一种用于与安卓设备交互的工具,主要应用于应用调试。确保电脑上安装的是最新版本的ADB,这有助于防止因版本过低引发的兼容性问题。 2. **开启手机的开发者模式**:在手机设置菜单中找到“关于设备”->“软件信息”,连续点击“版本”七次,返回上级菜单即可看到“开发者选项”。在开发者选项中激活“USB调试”功能,这一步是为了使电脑能够通过USB线连接到手机并执行调试任务。 3. **将手机与电脑建立连接**:使用数据线将手机连接到电脑。初次连接时,手机可能会显示一个权限请求窗口,要求用户同意电脑访问手机数据,请选择“始终允许”以简化后续流程。 #### 二、冻结系统应用的详细步骤 1. **在CMD中定位到ADB目录**:打开电脑的命令提示符(CMD),输入`cd`指令切换至ADB存放的文件夹路径,例如`cd C:\adb\tools`。确保路径准确无误,以便顺利开展后续操作。 2. **列出已安装的应用程序清单**:在CMD中输入`adb shell pm list pa...

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧