704.二分查找
class Solution {
public int search(int[] nums, int target) {
int left=0, right=nums.length;//不包含右侧所以不用-1
int middle=0;
while(left<right){
middle = (left+right)/2;
if(nums[middle]==target){
return middle;
}
if(nums[middle]>target){
right=middle;//不包含右侧所以不用-1
}else if(nums[middle]<target){
left=middle+1;//包含左侧所以需要+1
}
}
return -1;
}
}
左闭右开的写法。对于左闭右闭,就需要在右侧的地方-1
27.移除元素
第一眼思路:双指针,把要删除的元素跟最后的指向的元素交换,然后截取前面长度的元素即可,如果后面的指针是要删除的元素就往前移一位。
class Solution {
public int removeElement(int[] nums, int val) {
int n = nums.length;
int left = 0;
for (int right = 0; right < n; right++) {
if (nums[right] != val) {
nums[left] = nums[right];
left++;
}
}
return left;
}
}
}
实际上是双指针,前面的往后移,如果右指针指向的元素等于 val\textit{val}val,它不能在输出数组里,此时左指针不动,右指针右移一位。