- 看到题目首先想到的是利用循环遍历元素匹配目标值,再利用一层循环替换元素内容。
- 看完代码随想录视频,老师讲了更简单的解法,利用双指针,就可以省掉一层循环。
class Solution {
public int removeElement(int[] nums, int val) {
int slow = 0;
for(int fast = 0; fast < nums.length; fast++){
if(nums[fast] != val){
nums[slow++] = nums[fast];
}
}
return slow;
}
}
704.二分查找
二分查找以前总是对>=
还是 >
,加不加=
考虑不清。
通过老师讲解,首先确定不变量,也就是左闭右闭还是左闭右开。
确定了不变量,就按着这个思路考虑后面是否加=
。
//左闭右开的思路
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length;
int middle;
while(left < right){
middle = (left + right)/2;
if(nums[middle] > target){
right = middle;
}else if(nums[middle] < target){
left = middle + 1;
}else{
return middle;
}
}
return -1;
}
}