一、[704]二分查找
//二分法:有序
//[left,right] 故判定条件为left <= right,等于此时有意义;
//缩小范围 left=mid+1;
//right= nums.length-1;
//不要忘了修改mid 的值
class Solution {
public int search(int[] nums, int target) {
int left=0;
int right= nums.length-1;
int mid=left+(right-left)/2;
while(left<=right)
{
if(nums[mid]>target){
right=mid-1;
} else if (nums[mid]<target) {
left=mid+1;
}else{
return mid;
}
mid=left+(right-left)/2;//不要忘了修改mid 的值
}
return -1;
}
}
二、[27]移除元素
1、双指针
改变了元素的相对顺序
class Solution {
public int removeElement(int[] nums, int val) {
int left=0,right= nums.length-1;
while(left<=right)
{
if(nums[left]!=val&&nums[right]==val)
{
left++;
right--;
}else if(nums[left]!=val&&nums[right]!=val){
left++;
} else if (nums[left]==val&&nums[right]==val) {
right--;
} else if (nums[left]==val&&nums[right]!=val) {
int tmp=nums[left];
nums[left]=nums[right];
nums[right]=tmp;
left++;
right--;
}
}
return left;
}
}
二、快慢指针(推荐)
没有改变元素的相对顺序
//快指针:找到与目标值不相同的值,将其传给慢指针
//慢指针:接收快指针的值
class Solution {
public int removeElement(int[] nums, int val) {
// 快慢指针
int slowIndex = 0;
for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] != val) {
nums[slowIndex] = nums[fastIndex];
slowIndex++;
}
}
return slowIndex;
}
}