s1数组-1

115 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情

数组-1

#1.先上题目

题目是力扣的704题

image-20220607200810345

#2.思路简析

这个题目既然会放在第一个说明了这个题目的重要性首先我们需要明确几点

  1. 二分的适用情况-有序-而且还必须没有重复的元素,当然这里是对这个题目而言的,因为这个题目我们返回的是下标,重复的数字返回的下标将没有意义

  2. 其次就是一些细节

    • 对于这个我们讨论的数组是【】还是【)这里我们统一使用【】

    • 关键的循环判断语句-这里我们统一使用<=

       while(left<=right)
       {
           /*code*/
       }
      

#3.上代码

 class Solution
 {
 public:
     int search(vector<int> &nums, int target)
     {
         //我们使用的开闭方式其实是前闭后也闭的方式
         int left = 0;
         int right = nums.size() - 1; //定义好数组的下标
         //主体的循环
         while (left <= right) //这边是我们循环条件的定义,就是因为我们前面是使用了前闭后也闭的方式所以我们这边使用的才是<=
         {
             int mid = left + ((right - left) / 2); //这边的处理是为了防止数据的溢出其实这一句等同于(left+right)/2
             if (nums[mid] > target)
             {
                 right = mid - 1;
             }
             else if (nums[mid] < target)
             {
                 left = mid + 1;
             }
             else
             {
                 return mid;
             }
         }
         return -1; //没有找到目标值那么直接就返回-1;来表示没有找到数据
     }
 };

\