思路:数组有序,且无重复值,考虑二分法。
int search(vector<int>& nums,int target){
int left = 0, right = nums.size() - 1;
while(left <= right){
int mid = left + ((right - left) >> 1);
int num = nums[mid];
if(num == target){
return mid;
}else if(num < target){
left = mid + 1;
}else{
right = mid - 1;
}
}
return -1;
}
注:
left + ((right - left) >> 1) 其中“>>”的计算优先级低于“+”,要加括号。
“>>1”和“/2”的区别
>>1向上取整,/2向下取整
思路:优化后的双指针方法(减少循环次数)。
int removeElement(vector<int& >nums,int val){
int left = 0, right = nums.size();
while(left < right){
if(nums[left] == val){
nums[left] = nums[right - 1];
right--;
}else{
left++;
}
}
return left;
}
通过将nums[right - 1]的值赋给nums[left]来减少循环次数