二分查找
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length;
int middle = 0;
for(int i=0; i <= nums.length/2; i++){
middle = (left + right)/2;
if(nums[middle] > target){right = middle;}
else if(nums[middle] < target){left = middle;}
else if(nums[middle] == target){return middle;}
}
return -1;
}
}
![](https://img-blog.csdnimg.cn/img_convert/d52f7d3f8464b6c48124e723b79e1e3f.png)
解题:数组中无重复元素;有序递增数列。
二分查找:需要考虑边界条件。
移除元素
class Solution {
public int removeElement(int[] nums, int val) {
//暴力法
int length = nums.length;
for(int i = 0; i <length; i++){
if(nums[i] == val){
for(int j = i;j<length-1; j++){
nums[j] = nums[j+1];
}
length--;
i--;
}
}
return length;
}
}
![](https://img-blog.csdnimg.cn/img_convert/70f961acb3adce5e441df21ea0b93eac.png)
前两次错误主要是因为最后return的值写成了nums.length;以及没有考虑到在第二层循环后需要重新进行i--的操作。
class Solution {
public int removeElement(int[] nums, int val) {
//双指针
int index1 = 0;
for(int i = 0; i<nums.length; i++){
nums[index1] = nums[i];
if(nums[i] != val){
index1++;
}
}
return index1;
}
}
![](https://img-blog.csdnimg.cn/img_convert/ee172f7986a1ef086cb7b6721b18de46.png)
虽然之前看过双指针法的大概思路(快、慢指针),但是并没有上手实践。因此在上手实际操作时并不够熟练。