当前位置:首页 > 教育培训 >

二进制数1000对应的十进制数是(十进制1000二进制怎么表示)

来源:原点资讯(www.yd166.com)时间:2023-10-30 01:12:55作者:YD166手机阅读>>

二分查找能否用于“看似无序”的序列

一道LeetCode算法题奉上:

https://leetcode-cn.com/problems/find-in-mountain-array/

这道题是在说,在一个数组中,它的元素中存在一个峰值,峰值左右两边的元素都比它小,然后给出一个查找值target,让你找到元素值等于target的最小下标,如果没有就返回-1。

峰值左边的元素由小到大排列,峰值右边的元素由大到小排列,整个数组毫无疑问是无序的,但它是部分有序的,如下图所示:

二进制数1000对应的十进制数是,十进制1000二进制怎么表示(17)

如果单纯在峰值左边或是峰值右边都可以进行二分查找。可是问题来了,要如何在茫茫人海中找到峰值呢?

细心的朋友已经发现了:

如果遇到一个元素,它的左边元素比它小,右边元素比它大,那么峰值一定在它的右边;

如果遇到一个元素,它的左边元素比它大,右边元素比它小,那么峰值一定在它的左边;

如果遇到一个元素,它的左边元素比它小,右边元素也比它小,那么它就是峰值!

根据以上规律,就可以写一个二分查找峰值的算法了。

int findsummit(vector<int> arr)
{
int len=arr.size;
int left=0;
int right=len-1;
while(left<=right)
{
int mid=(left right)/2;
int pre=arr[mid-1];
int now=arr[mid];
int aft=arr[mid 1];
if(pre<now&&now>aft)
{
return mid;
}
else if(pre<now&&now<aft)
{
//峰值在右边
left=mid 1;
}
else
{
//峰值在左边
right=mid;
}
}
return -1;
}

这里与简单二分查找略有不同的是峰值如果在左边right置为mid而不是mid-1,这是为了防止数组越界,大家可以思考一下为什么,本文主要介绍二分思想就不再过多介绍了。

找到了峰值的位置(下标),我们再去找target就易如反掌了,可以直接套用简单二分查找算法的模板。既然题目要求找到等于target的元素的最小下标,我们就先找左边,即[0,summit];再找右边,即[summit,len-1]。summit为峰值下标,len为序列长度。

以下代码为通过该题的代码:

/**
* // This is the MountainArray's API interface.
* // You should not implement it, or speculate about its implementation
* class MountainArray {
* public:
* int get(int index);
* int length;
* };
*/
class Solution {
public:
int findInMountainArray(int target, MountainArray &mountainArr) {
int len=mountainArr.length;
int left=0;
int right=len-1;
int summit=-1;
int mid=-1;
while(left<=right)
{
mid=(left right)>>1;
int pre=mountainArr.get(mid-1);
int now=mountainArr.get(mid);
int aft=mountainArr.get(mid 1);
if(pre<now&&now>aft)
{
summit=mid;
break;
}
else if(pre<now&&now<aft)
{
left=mid 1;
}
else
{
right=mid;
}
}
left=0;
right=summit;
while(left<=right)
{
mid=(left right)>>1;
int now=mountainArr.get(mid);
if(target==now)
{
return mid;
}
else if(target<now)
{
right=mid-1;
}
else
{
left=mid 1;
}
}
left=summit;
right=len-1;
while(left<=right)
{
mid=(left right)>>1;
int now=mountainArr.get(mid);
if(target==now)
{
return mid;
}
else if(target>now)
{
right=mid-1;
}
else
{
left=mid 1;
}
}
return -1;
}
};

二进制数1000对应的十进制数是,十进制1000二进制怎么表示(18)

二进制数1000对应的十进制数是,十进制1000二进制怎么表示(19)

二进制数1000对应的十进制数是,十进制1000二进制怎么表示(20)

栏目热文

1000的十进制对应二进制多少(1000的十进制转换为二进制)

1000的十进制对应二进制多少(1000的十进制转换为二进制)

当前最先进的计算机都采用的是冯诺依曼体系结构,所以冯诺依曼是当之无愧的数字计算机之父。冯诺依曼体系结构特点:(1)计算机...

2023-10-30 01:48:48查看全文 >>

二进制10010101对应的十进制数(二进制数010对应的十进制数是多少)

二进制10010101对应的十进制数(二进制数010对应的十进制数是多少)

S7-200smart数据类型和存储区和寻址方式 原创2021-05-01 10.06 凯特利电子如果你阅读本文之后对作...

2023-10-30 01:55:38查看全文 >>

10进制数1000对应二进制数为多少(十进制1000对应的16进制数是多少)

10进制数1000对应二进制数为多少(十进制1000对应的16进制数是多少)

新华社郑州10月24日电 题:一位种粮大户的秋收新华社记者刘金辉、许炜凯看着仓库里堆成小山的玉米,河南西平县杨庄乡仪封北...

2023-10-30 01:50:54查看全文 >>

十进制1000对应的二进制数是多少(十进制对应的二进制是多少)

十进制1000对应的二进制数是多少(十进制对应的二进制是多少)

昨天给大家分享了PLC编程的进制的介绍,今天分享进制转换。希望能够帮助到大家。十进制转二进制: 以10进制依次除以2取余...

2023-10-30 01:31:18查看全文 >>

10进制数为1000对应二进制是多少(十进制1-10对应二进制数字多少)

10进制数为1000对应二进制是多少(十进制1-10对应二进制数字多少)

二进制与十进制表十进制数12345678910二进制数11011100101110111100010011010十进制数...

2023-10-30 01:47:42查看全文 >>

十进制数1000对应二进制数为多少(二进制1001对应的十进制数是几)

十进制数1000对应二进制数为多少(二进制1001对应的十进制数是几)

全是干货数进制及其转换 (1)数位:是指数码在一个数中所处的位置。(2)基数:是指某个进制数中允许选用的基本数码的个数。...

2023-10-30 01:38:56查看全文 >>

十进制1000对应的16进制数是多少(16进制1000换成十进制是多少)

十进制1000对应的16进制数是多少(16进制1000换成十进制是多少)

大家在电商平台购物时,在不清楚产品的好坏时,会不会浏览已购买用户的评论,以此来作为评判这款产品的佐证?笔者在购买陌生产品...

2023-10-30 01:56:04查看全文 >>

十进制数1000对应的十六进制数为(十进制1000转十六进制是多少)

十进制数1000对应的十六进制数为(十进制1000转十六进制是多少)

目录1.什么是进制 12. 四种常用计算机进制 12.1 十进制 12.2 二进制 12.3 八进制 12.4 十六进制...

2023-10-30 01:49:28查看全文 >>

十进制数1000对应的二进制数是(二进制数1000对应的十进制数是)

十进制数1000对应的二进制数是(二进制数1000对应的十进制数是)

英语1. I’m feeling sick. I ________ so much chocolate.A. needn...

2023-10-30 01:19:33查看全文 >>

我的世界原始科技整合(我的世界科技简单版教程)

我的世界原始科技整合(我的世界科技简单版教程)

PDF文件是我们在办公和学习中经常遇到的一种文件格式。我相信每个人的电脑里都有很多PDF文件。有时候,为了方便文件的整理...

2023-10-30 01:12:51查看全文 >>

文档排行