二分查找在常见的面试题中也非常常见,思路基本上也差不多
首先看问题描述
这里有一个需要注意的点,就是要查找的数字可能在这个升序的整型数组中多次出现,而题目中要求返回的是第一个出现target的下标值,而经过二分法的方法第一次查找到的target的下标值可能不是不是这个升序数组中第一次出现的,
代码如下
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 如果目标值存在返回下标,否则返回 -1 * @param nums int整型vector * @param target int整型 * @return int整型 */ //int search(vector<int>& nums, int target) { // write code here int search(vector<int>& nums,int target){ int low=0; int high=nums.size()-1; while(low<=high){ int mid=(low+high)>>1; if(target==nums[mid]){ while(mid>=0 && nums[mid]==target){ mid--; } return mid+1; } else if(target<nums[mid]) high=mid-1; else low=mid+1; } return -1; } };
原文:https://www.cnblogs.com/wq-9596/p/14847628.html