力扣算法笔记C#版本(1)

第一题:二分查找

题目信息:

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

示例:

      输入: nums = [-1,0,3,5,9,12], target = 9        
      输出: 4
      解释: 9 出现在 nums 中并且下标为 4

解决方法:

public int Search(int[] nums, int target) 
    {
        int low = 0; int high = nums.Length- 1;

        while (low <= high)
        {
            int mid = (low + high) / 2;
            //先折半找中间值,若找到返回下标

            if (nums[mid] == target)
            {
                return mid;
            }
            else if (nums[mid] > target)
            //中间值大于目标值,则目标值在中间值左侧,查找范围向左移缩小一半
            {
                high = mid - 1;
            }
            else if (nums[mid] < target)
            //中间值小于目标值,则目标值在中间值右侧,查找范围向右移缩小一半
            {
                low = mid + 1;
            }
        }

        return -1;

    }

注:要使用二分查找必须是在有序数组内

第二题:第一个错误的版本

题目信息:

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。
假设你有 n 个版本 [1, 2, …, n],你想找出导致之后所有版本出错的第一个错误的版本。 你可以通过调用 bool
isBadVersion(version) 接口来判断版本号 version是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

解题思路:

这道题理解了一下,其实大体思路还是跟第一道题目类似,先定义一下数组的左右边界,然后折中找中间值,然后根据接口判断是否正确,因为第一个错误版本后面都是错误的,方法这就来了,如果中间值正确,那么第一个错误版本在中间值右侧,反之则在左侧或自身。

public int FirstBadVersion(int n) {
        int left = 1, right = n;
        while (left < right) { 
            int mid = left + (right - left) / 2; 
            //找出中间值 
            if (IsBadVersion(mid))
                right = mid; // 错误版本在右侧
            else 
                left = mid + 1; // 错误版本在左侧
        }
        //left == right,只有一个版本
        return left;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

立刀人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值