![3b3f9ebd5691001fd482abb31137565a.png](https://i-blog.csdnimg.cn/blog_migrate/7688e00d466ded1093a821748c9ee623.jpeg)
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完。目前我选择C语言,Python和Java作为实现语言,因为这三种语言还是比较典型的。由于篇幅和> 精力有限,其他语言的实现有兴趣的朋友请自己尝试。初级难度说的差不多的时候,我打算再加点其他内容,我可能会从操作系统到协议栈,从分布式> 聊到大数据框架,从大数据聊到人工智能,... ...。
如果有任何问题可以在文章后评论或者私信给我。
我会持续分享下去,敬请您的关注。
LeetCode 704. 二分查找 (Binary Search)
问题描述:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例:
![af63459a26bd6a82babdc939bd7b0ae2.png](https://i-blog.csdnimg.cn/blog_migrate/fa6fdedc0676eb50ef45372236b8f722.jpeg)
C语言实现:
二分查找是一个十分常用的算法,其实在前面的题目中我们已经用过这种算法。
本来不打算解这道题,但是还是觉得劲量不要遗漏的好。
对于新手来说,要提醒一下,二分查找查找的前提是有序数列,所以要操作的数列是一个无序的,要先排序。
我曾经就碰到过一个面试的,上来就二分查找,根本没有判断数组是否有序。
二分查找的思路非常简单,通常我们要定义两个整形变量left和right,分别保存数组的起始下标和末尾下标。
然后通过判断target与nums[(right+left)/2]的大小关系,来不断调整left和right的值,以此来不断的缩小查找的范围,最后得到结果。
![3c72d36b640339f96b9f93a322d383e6.png](https://i-blog.csdnimg.cn/blog_migrate/063b24e9cdde4537c8c35c44a1c63e3f.jpeg)
具体代码如下:
![309dc991bdbb971ac4f14e2f242a1500.png](https://i-blog.csdnimg.cn/blog_migrate/4aafd4a2d39f2f529e39d93b0722dc60.jpeg)
![c8e4169aea3747a6123686f33978d1a5.png](https://i-blog.csdnimg.cn/blog_migrate/c7437b52d23a92ebd8281ddf47d49231.jpeg)
Java语言的实现:
Java 的实现和C语言的实现基本一致,不再撰述。代码如下:
![8ee30487fb34232a2cc99f0faa7c03e2.png](https://i-blog.csdnimg.cn/blog_migrate/97926b72efd6573afa49b76ac29a75da.jpeg)
![bd30693aaea5f0a6c07c53ef267ca66d.png](https://i-blog.csdnimg.cn/blog_migrate/b41aad562da9b77140b91e1986d9f331.jpeg)
python语言的实现:
python 的实现和C语言的实现基本一致,不再撰述。代码如下:
![4fe79bd9839e3262d72e1f4a97b91103.png](https://i-blog.csdnimg.cn/blog_migrate/75dafa906ad2bd3ae54418fe164231c9.jpeg)
![2eeca5e50137e28f42130b1e8140318a.png](https://i-blog.csdnimg.cn/blog_migrate/b8cdf5a514de30dc7c5ab8475ed30930.jpeg)