代码随想录---跟刷力扣笔记记录---二分查找---自看

随便记录一下,在准备秋招的过程中,笔者从力扣开始入手,由于很早就关注了程序员卡尔,所以决定跟随随想录来准备笔试。

如题:二分查找

给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。

正如卡哥所描述的那样,对于二分查找关键在于边界的问题,left和right的开和闭,区别很大,在卡哥的详解下笔者明白了区间到底是开还是闭,关键在于我们要查找的target一开始包不包含左和右的边界 思考以后的代码如下:

#include <stdio.h>
#include <stdlib.h>

int half_search(int *Array, int numsSize, int target)
{
  int left = 0;
  int right = numsSize - 1;
  int middle = 0;

  // 若left小于等于right,说明中间元素不为0
  while (left <= right)
  {
    // 更新查找下标middle的值
    middle = (left + right) / 2;
    // 此时target可能在[left,mddile-1]中
    if (Array[middle] > target)
    {
      right = middle - 1;
    }
    // 此时target可能在[middle+1,right]中
    else if (Array[middle] < target)
    {
      left = middle + 1;
    }
    // middle == target
    else if (Array[middle] == target)
    {
      return middle;
    }
  }
  // 未找到,返回-1;
  return -1;
}
int main(int argc, char **argv)
{
  int Array[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  int target = 0;
  while (1)
  {
    printf("Please input target: \n");
    scanf("%d", &target);
    int res = half_search(Array, 9, target);
    if (res < 0)
    {
      fprintf(stderr, "target not find.\n");
    }
    else
    {
      printf("target is found.index is %d\n", res);
    }
  }

  return 0;
}

!!!笔者没有对输入的target做错误判断

此类笔记只是笔者自己的记录方便复盘,各位coder们嘴下留情

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值