704. 二分查找
二分查找主要是写的时候要注意是左闭右闭区间,还是左闭右开区间,需要注意下这个区别
很好理解,
1、使用0到n-1个所有的位置的元素比较,所以 left=0,right=n-1;
2、是种左闭右闭的写法,[left,right] 一定是需要 最后可能相遇的,要不然会漏元素,所以left<=right;
3、因为middle已经比较过了,所以下一次的区间一定是避开middle的
所以 left=middle+1;
or
right=middle-1;
完成!!!
27.移除元素
暴力写法,使劲循环就完了!
public int removeElement(int[] nums, int val) {
int res = 0;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == val) {
for (int j = i+1; j < nums.length; j++) {
if (nums[j] != val) {
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
res++;
break;
}
}
}else{
res++;
}
}
return res;
}
双指针
双指针,快慢指针,其实就是慢指针停留在命中元素的位置,快指针快一步把后面的元素移过来,也不会改变数组中元素的相对位置!
不需要swap,因为后置元素被舍弃了,直接把不等于val的快元素的值搬到前面去。
public int removeElement(int[] nums, int val) {
int left = 0;
int n = nums.length;
for (int right = 0; right < n; right++) {
if(nums[right]!=val){
nums[left]=nums[right];
left++;
}
}
return left;
}