简单
相关标签
相关企业
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果 target 存在返回下标,否则返回 -1。
你必须编写一个具有 O(log n) 时间复杂度的算法。
示例 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
提示:
- 你可以假设
nums中的所有元素是不重复的。 n将在[1, 10000]之间。nums的每个元素都将在[-9999, 9999]之间。
题解: 二分好设置,查找到就出结果,查找失败的条件不好写,缩小范围时候要不要包含中间值不好写。 修改过程: 1、找到情况未设置break退出循环; 2、high和Low未赋初值。
#include <stdio.h>
#include <stdlib.h>
int main ()
{
int n, m, i, target, low, high, mid;
scanf ("%d", &n);
low = 1;
high = n;
int* num = (int*)malloc(sizeof(int) * n + 1);
num[0] = -1;
for (i = 1;i <= n;i ++)
{
scanf ("%d", &num[i]);
}
scanf ("%d", &target);
while (high >= low)
{
mid = (high + low) / 2;
if (target == num[mid])
{
printf ("%d", mid);
break;
}
else if (target > num[mid])
{
low = mid + 1;
}
else if (target < num[mid])
{
high = mid - 1;
}
}
if (high < low)
{
printf ("%d", num[0]);
}
return 0;
}