题解 | #二分查找-I#
二分查找-I
https://www.nowcoder.com/practice/d3df40bd23594118b57554129cadf47b
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型vector
* @param target int整型
* @return int整型
*/
//试试可不可以用find-> find可以 但是本题要求的是用二分查找
//
// int search(vector<int>& nums, int target) {
// auto it = find(nums.begin(),nums.end(),target);
// if(it == nums.end()){
// return -1;
// }
// return it-nums.begin();
// // write code here
// }
//二分查找 指针
int search(vector<int>& nums, int target) {
int left,right,mid;
left = 0,right = nums.size()-1,mid =(right + left) /2;
//vector数组可以用下标随意访问
while(left<=right)
{
if(target == nums[mid]) return mid;
if(target < nums[mid]){right = mid-1;}
else{
left = mid+1;
}
mid = (right+left)/2;
}
return -1;
// write code here
}
};
二分查找: 用指针的思想。
定义三个指针,分别指向数组起始位置(left)、数组的中间位置(mid)、数组最后一元素的位置(right)。
因为给的nums是一个有序的数组,可以用“二分” 的思想。
每次比较target和mid位置。会有两种情况
1.target和nums[mid]的值相同,则直接返回mid,程序退出;
2.target<nums[mid],说明想要查找的值在mid的左半区,此时则需要更新right和mid的位置,right = mid-1,
target>nums[mid],说明想要查找的值在mid的右半区,此时则需要更新left和mid的位置,left= mid+1,
再更新mid的位置。
#C++面试题#
查看26道真题和解析