今天复习了一下二分法和双指针,因为之前用python刷过所以转java之后也是快速地过了一下,再手敲一遍熟悉一下代码,然后主要是还是要注意一些越界的问题,自己写可能就注意不到,贴一下代码吧,双指针解决移除元素还可以通过相向双指针法,会遍历更少的元素。代码如下
二分查找
class Solution {
public int search(int[] nums, int target) {
if(target<nums[0] || target>nums[nums.length-1]){
return -1;
}
int left=0,right=nums.length-1;
while(left<=right){
int middle=left+(right-left)/2;
if(target==nums[middle]){
return middle;
}
if(target>nums[middle]){
left=middle+1;
}
if(target<nums[middle]){
right=middle-1;
}
}
return -1;
}
}
移除元素
双指针法
class Solution {
public int removeElement(int[] nums, int val) {
int s=nums.length;
int slow=0;
int fast=0;
for (fast=0;fast<s;fast++){
if(nums[fast]!=val){
nums[slow]=nums[fast];
slow++;
}
}
return slow;
}
}
相向双指针法
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int right = nums.length - 1;
while(right >= 0 && nums[right] == val) right--; //将right移到从右数第一个值不为val的位置
while(left <= right) {
if(nums[left] == val) { //left位置的元素需要移除
//将right位置的元素移到left(覆盖),right位置移除
nums[left] = nums[right];
right--;
}
left++;
while(right >= 0 && nums[right] == val) right--;
}
return left;
}
}