也是一道比较经典的二分搜索的题目了,无压力拿下
class Solution {
public int search(int[] nums, int target) {
int left=0;
int right=nums.length-1;
while(left<=right){
int mid = (left+right)/2;
if(nums[mid] == target){
return mid;
}else if(nums[mid]>target){
right = mid-1;
}else if(nums[mid]<target){
left = mid+1;
}
}
return -1;
}
}
引用一下labuladong的打油诗🐶
这道题使用了一个快慢指针的一个思路,当快指针遇到目标元素时直接跳过(即fast+1),没遇到目标时将其赋值给慢指针(并让慢指针加一)
class Solution {
public int removeElement(int[] nums, int val) {
int fast=0;
int slow=0;
while(fast<nums.length){
if(nums[fast] != val){
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
}
在做这道题时没有注意到数组的边界情况导致出现fast=nums.length的现象,产生了数组越界