1,二分法查找
leetcode链接: - 力扣(LeetCode)
分析链接:代码随想录
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length -1;
//注意这里是左闭右闭区间
while(left<=right){
int mid = left+((right-left)/2);
if(nums[mid]==target){
return mid;
}else if (nums[mid]<target){
left=mid+1;
}else if(nums[mid]>target){
right = mid-1;
}
}
return -1;
}
}
但其实没有考虑到特殊情况下的存在
// 避免当 target 小于nums[0] nums[nums.length - 1]时多次循环运算
if (target < nums[0] || target > nums[nums.length - 1]) {
return -1;
}
2,移除元素
leetcode链接:. - 力扣(LeetCode)
分析链接:代码随想录
暴力解法,循环去处理
class Solution {
public int removeElement(int[] nums, int val) {
int size = nums.length;
for(int i=0;i<size;i++){
if(nums[i]==val){
for (int j = i + 1; j < size; j++) {
nums[j - 1] = nums[j];
}
i--;
size--;
}
}
return size;
}
}
快慢指针方法(需要仔细研究一下)
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;
}
}