博主最近在刷力扣的一些经典算法题,希望和各位朋友们分享一下我的成果,如果我有做的不好的地方,欢迎各位大佬指正!(解题代码用C++语言)
![在这里插入图片描述](https://img-blog.csdnimg.cn/307be986fb1842c0b557ed78bc9223e8.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzQ2MjI1ODc1,size_16,color_FFFFFF,t_70)
二分查找
给定一个 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
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
解题思路:
这一道题是最简单的二分查找的模板题,对于任何有关二分查找的题目,只需要记住这三点:
如果目标值等于中间元素,则找到目标值。
如果目标值较小,继续在左侧搜索。
如果目标值较大,则继续在右侧搜索。
思路大致上有了,然后就可以编写代码了。注意看清楚题目要求,当目标值找到或找不到时应返回什么值。
解题代码:
class Solution {
public:
int search(vector<int>& nums, int target) {
int l=0,r=nums.size()-1,mid; //初始化指针
mid=(l+r)/2;
while(l