704. 二分查找 题目链接
本题思路为二分查找,主要注意区间问题,是左闭右开还是左闭右闭,针对不同的区间定义,对循环的结束条件和每一步的处理是不同的。
class Solution {
public int search(int[] nums, int target) {
//左闭右开
//int left = 0;
//int right = nums.length;
//while(left < right){
// int middle = left + (right - left) / 2; //这里不用(right + left) / 2是防止溢出
// if(target > nums[middle]){
// left = middle + 1;
// }else if (target < nums[middle]){
// right = middle;
// }else{
// return middle;
// }
//}
//return -1;
//左闭右闭
int left = 0;
int right = nums.length - 1;
while(left <= right){
int middle = left + (right - left) / 2;
if(target > nums[middle]) {
left = middle + 1;
}else if(target < nums[middle]) {
right = middle - 1;
}else {
return middle;
}
}
return -1;
}
}
———————————————————————————————————————————
27. 移除元素 题目链接
本题思路为快慢指针,快指针用来搜索不等于目标数值的元素,慢指针用来接收结果
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
int fast = 0;
while(fast < nums.length){
if(nums[fast] != val){
nums[slow++] = nums[fast];
}
fast++;
}
return slow;
}
}