704 二分查找
二分查找就是不断的取中间赋给左边界或者右边界;
但是要注意while里面的条件要不要取等于号,以及if结果的边界取mid还是(mid-1)/(mid+1);
- 当左闭右闭时,也就是下面的代码,由[1,1]闭区间可知,左右边界可以相等,因此while条件里可以取到等号。因为if条件里是target < nums[mid],也就是mid所在的值一定大于目标值,因此右边界取mid-1,否则不符合条件。
- 当左闭右开时,由[1,1)可知,左右边界不可以相等,因此while条件里不可以取到等号。
class Solution {
public int search(int[] nums, int target) {
int mid = 0;
int l = 0;
int r = nums.length-1;
while( l <= r ){
mid = ( l + r )/ 2;
if(target < nums[mid]){
r = mid-1;
}
else if(target > nums[mid]){
l = mid+1;
}
else if(target == nums[mid]){
return mid;
}
}
return -1;
}
}
27 移除元素
数组的元素移除需要两个指针,一个快指针(代码中的i)一个慢指针(代码里的length),通过快指针来找到val所在的位置,慢指针负责存储除去val的元素。
class Solution {
public int removeElement(int[] nums, int val) {
int length = 0;
for(int i=0; i<nums.length; i++){
if(nums[i] != val){
nums[length] = nums[i];
length++;
}
}
return length;
}
}