当前位置:   article > 正文

【Leetcode每日一题】二分算法 - 二分查找(17) (难度⭐)

【Leetcode每日一题】二分算法 - 二分查找(17) (难度⭐)

1. 题目解析

Leetcode链接:704. 二分查找

这个问题的理解其实相当简单,只需看一下示例,基本就能明白其含义了。

核心在于在给定的数组中查找给定的值,然后返回其索引即可。


2. 算法原理

     1. 定义 left 和 right 指针,分别指向数组的左右区间。

     2.找到待查找区间的中间点 mid。然后分三种情况讨论:

  •     i. arr[mid] == target:说明正好找到,返回 mid 的值。
  •     ii. arr[mid] > target:说明[mid, right] 这段区间都大于 target。因此舍去右边区间,在左边 [left, mid - 1] 的区间继续查找。即让 right = mid - 1,然后重复步骤 2。
  •     iii. arr[mid] < target:说明[left, mid] 这段区间的值都小于 target。因此舍去左边区间,在右边 [mid + 1, right] 区间继续查找。即让 left = mid + 1,然后重复步骤 2。

     3. 当 left 与 right 错开时,说明整个区间都没有这个数,返回 -1。


3. 代码编写

  1. class Solution {
  2. public:
  3. int search(vector<int>& nums, int target) {
  4. int left = 0, right = nums.size() - 1;
  5. int mid;
  6. while(left <= right)
  7. {
  8. mid = (left + right)/2;
  9. if(nums[mid]>target)
  10. {
  11. right = mid - 1;
  12. }
  13. else if(nums[mid]<target)
  14. {
  15. left = mid + 1;
  16. }
  17. else
  18. {
  19. return mid;
  20. }
  21. }
  22. return -1;
  23. }
  24. };

The Last

嗯,就是这样啦,文章到这里就结束啦,真心感谢你花时间来读。

觉得有点收获的话,不妨给我点个吧!

如果发现文章有啥漏洞或错误的地方,欢迎私信我或者在评论里提醒一声~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/151884
推荐阅读
相关标签
  

闽ICP备14008679号