(写给未来忘记的自己)
(刚开始方法比较笨)
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums
中的 target
,如果目标值存在返回下标,否则返回 -1
。
class Solution {
public:
int search(vector<int>& nums, int target) {
int size_nums=nums.size();
int stare=0;
int end=size_nums-1;
int half_size=(stare+end)/2;
int target_nums;
if(size_nums==1)
{
if(nums[0]==target){return 0;}
else{return -1;}
}
if(size_nums==2){
if(nums[0]==target){return 0;}
else if(nums[1]==target){return 1;}
else{return -1;}
}
while(stare<half_size)
{
target_nums=nums[half_size];
if(target_nums==target){
return half_size;
break;}
else if(target_nums<target)
{ stare=half_size;}
else if (target_nums>target){ end=half_size;}
half_size=(stare+end)/2;
if(half_size==stare){
if(nums[stare]==target){return stare;}
else if(nums[end]==target){return end;}
else{return -1;}
}
}
return -1;
}
};
注意:
1.跳出循环的方式采用的 stare==half_size 所以当stare与end相距仅有1
的时候取不到上界就会跳出循环,所以需要特殊处理。同理在数组小于等于2个的时候同样不会进入循环,所以需要处理。
2. 这道题自己的重点在于边界的处理。