数组知识
704 二分查找
https://leetcode.cn/problems/binary-search/
class Solution {
public int search(int[] nums, int target) {
int len = nums.length-1;
int low = 0;
int high = len ;
while(low <= high){
int mid = (low+high)/2;
if(nums[mid]>target){
high = mid-1;
}else if (nums[mid]<target){
low = mid+1;
}else{
return mid ;
}
}
return -1;
}
}
移除元素
1.暴力求解
class Solution {
public int removeElement(int[] nums, int val) {
int delLen=nums.length;//初始的值是原先长度
for(int i=0; i<delLen;i++){//
if (nums[i]==val ){//如果是目标元素,逐个删除,将后续元素前移
for(int j=i;j<delLen-1;j++){//j+1限制数组长度
nums[j]=nums[j+1];
}
delLen=delLen-1;//数组长度减一
i=0;//再返回开头再查找一遍
}
}
return delLen;
}
}
2.快慢指针
双指针法: 通过一个快指针和慢指针在一个for循环下完成两个for循环的工作。
class Solution {
public int removeElement(int[] nums, int val) {
int slowIndex=0;
for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
if(val!=nums[fastIndex]){
nums[slowIndex++]=nums[fastIndex];
}
}
return slowIndex;
}
}