【 力扣刷题-数组篇】704. 二分查找的思路和C语言详细代码
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
示例 1:
输入:nums
= [-1,0,3,5,9,12],target
= 9 输出: 4 解释: 9 出现在nums
中并且下标为 4
示例 2:
输入:nums
= [-1,0,3,5,9,12],target
= 2 输出: -1 解释: 2 不存在nums
中因此返回 -1
题目链接
做题思路
初学c语言也许会想到使用暴力枚举,但是暴力枚举有以下缺点
1.时间复杂度较高
2.不适用于大数据集
3.无法利用数组的有序性
4.内存使用
5.缺乏灵活性
6.无法处理动态变化
所以我们采用一种更快捷的方法二分查找法。
常见问题
通常想到二分法也许是mid=(left+right)/2,但这种方法有个弊端就是mid = (left + right) / 2 容易溢出,因为left+right很容易超过int范围。所以一般我们再取中间值时采用mid=left+(right-left)/2。
代码
#include<stdio.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9,10,11 };
int k = 7;
int sz = sizeof(arr) / sizeof(arr[0]);
int left = 0;
int right = sz - 1;
while (left <= right)
{
int mid = left + (right - left) / 2;
if (arr[mid] > k)
{
right = mid - 1;
}
else if (arr[mid] < k)
{
left = mid + 1;
}
else
{
printf("%d\n", mid);
break;
}
}
if (left > right)
{
printf("找不到");
}
这是我来到优快云的第一篇文章,想以此来激励自己早日实现自己的2w行代码,早日摆脱新手小白的身份,为日后进入互联网大厂打下坚实的基础。