社区
数据结构与算法
帖子详情
请教算法
bto310
2005-03-05 12:21:08
问题描述:
现有一有序数列{-56,-23,0,8,10,12,26,38,65,98},给定一特定值37,求该序列中等于该值,或小于该值并最接近该值的数。如上面的结果就是26。
大家有什么思路?
...全文
225
12
打赏
收藏
请教算法
问题描述: 现有一有序数列{-56,-23,0,8,10,12,26,38,65,98},给定一特定值37,求该序列中等于该值,或小于该值并最接近该值的数。如上面的结果就是26。 大家有什么思路?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gofor
2005-04-14
打赏
举报
回复
直接用二分法查找特定值,如果最后比较的元素不比它大,则就是该元素,否则就是其前面一个元素。算法复杂度O(logN)。
xiaohaiyan
2005-04-08
打赏
举报
回复
无序数组可以用quickselect, 算法效率O(n*logn )
MagicCarmack
2005-04-06
打赏
举报
回复
如果是有序数组,就用二分法比较高效!
无序数组就有些复杂!
chenyec
2005-04-05
打赏
举报
回复
我看这个是有序表!
while ( value < a[i] ) {
if ( value == a[i] ) return a[i];
i++;
}
return a[i-1];
arrowcy
2005-03-06
打赏
举报
回复
其实就是对这个序列中的每个数减去那个特定值37后求绝对值,然后求这个绝对值的最小值就可以了
这个算法就是O(N)的。另外由于要求是小于37,所以在每次找到一个更小的值的时候都判断一下是大于还是小于,大于就不管就行了
Yaka
2005-03-05
打赏
举报
回复
用二杈樹!
zengwujun
2005-03-05
打赏
举报
回复
再给个统计比较次数的
#include <iostream>
using namespace std;
void main()
{
int nCount=0;//统计次数
int num[] = {-56, -23, 0, 8, 10, 12, 26, 38, 65, 98 };
int nLen = sizeof(num) / sizeof(int);
int value = 37;
int left=0,right=nLen-1;
int index;
while(left<=right)
{
index=(left+right)/2;
if(value == num[index])
{
nCount++;
break;
}
else
{
if(value<num[index])
{
nCount++;
right=index-1;
}
else
{
if(num[index+1]>value)
{
nCount++;
break;
}
else
{
nCount++;
left=index+1;
}
}
}
}
cout<<index<<','<<nCount<<endl;
}
zengwujun
2005-03-05
打赏
举报
回复
#include <iostream>
using namespace std;
void main()
{
int num[] = {-56, -23, 0, 8, 10, 12, 26, 38, 65, 98 };
int nLen = sizeof(num) / sizeof(int);
int value = 37;
int left=0,right=nLen-1;
int index;
while(left<=right)
{
index=(left+right)/2;
if(value == num[index])
break;
else
if(value<num[index])
right=index-1;
else
if(num[index+1]>value)
break;
else
left=index+1;
}
cout<<index<<endl;
}
二分查找,O(logn)
pkd
2005-03-05
打赏
举报
回复
我的算法是O(N),还有更小的吗?
jp1984
2005-03-05
打赏
举报
回复
二叉搜索树效率比较高O(n*logn)
直接做两次遍历即可效率O(n^2)
pkd
2005-03-05
打赏
举报
回复
#include <iostream.h>
int main(int argc, char* argv[])
{
int num[] = {-56, -23, 0, 8, 10, 12, 26, 38, 65, 98 };
int count = sizeof(num) / sizeof(int);
int value_to_find = 37;
int index = 0;
unsigned int last_diff = value_to_find - num[0];
unsigned int now_diff ;
for(int i = 0;i<count; ++i){
now_diff = value_to_find - num[i] ;
if(now_diff < last_diff){
index = i;
if(num[i] == value_to_find) break;
}
}
cout<<"The "<< index << "th number : "<< num[index] << " match your case! \n";
return 0;
}
bto310
2005-03-05
打赏
举报
回复
请详细说明,谢谢。
C语言
算法
精华
随机数生成
算法
anya Re: 伪随机数的生成
算法
? anya 计算并输出表达式结果 anya 计算并输出表达式结果2 anya 递归与栈溢出 anya Re: Excel 规划求解问题,求助,
请教
!! anya Re: anya:
请教
一个问题 anya Re: 如何给汉字分界? anya Re: 八皇后
算法
问题
请教
? anya Re: 急寻图象压缩
算法
anya 游戏中最佳路径的问题 anya 平面点覆盖问题求教 anya Re: 平面点覆盖问题求教 anya Re: 平面点覆盖问题求教 anya Re: 平面点覆盖问题求教 anya Re: 集合求交 anya Re: 微软考题 anya Re: 微软考题 anya Re: 请问自然图象的概率分布函数 anya 华
aa.rar_自动组卷_自动组卷
算法
这是用遗传
算法
写的自动组卷源代码,只有一个文件,是别人写的,没看懂,希望传上去,有人看懂的话,就
请教
一下
Ztxz16学图论
题目描述众所周知,Zjr506是
算法
之神,因此Ztxz16经常向他
请教
算法
。这一天,Zjr506在教导了Ztxz16关于图论方面的一些
算法
后,给他出了一道图论题作为家庭作业: 给定N个点,M条无向边,Q个询问,每个询问给定L, R,问连上第L~R条边后,图中有多少联通块(询问之间互不影响)。 Ztxz16智商太低,百思不得其解,只好向你
请教
这个问题。数据范围N, M, Q <= 200000,
【雅礼联考GDOI2017模拟9.2】Ztxz16学图论
Description众所周知,Zjr506是
算法
之神,因此Ztxz16经常向他
请教
算法
。这一天,Zjr506在教导了Ztxz16关于图论方面的一些
算法
后,给他出了一道图论题作为家庭作业: 给定N个点,M条无向边,Q个询问,每个询问给定L, R,问连上第L~R条边后,图中有多少联通块(询问之间互不影响)。 Ztxz16智商太低,百思不得其解,只好向你
请教
这个问题。Solution用LCT做的把模
力扣学习路径
来自问题:
请教
算法
怎么入门??? 每次鼓起勇气上 leetcode 后,都要怀疑自己的智商。 看书先,没有什么比看书更快,密度更高的入门方式了。 然后就是刷题+总结思考 这个不能再简单了吧…… 《
算法
导论》 呗…… 『
算法
第四版』 挺适合入门的,跟着例子和习题做一遍 多练就好了,这种东西也是熟能生巧。记得 做题目要踏实,要搞明白里面的每个知识点,每一行代码。 看不懂的可以上论坛提问题,当然如果能...
数据结构与算法
33,028
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章