代码随想录算法训练营第一天|LeetCode 704,27
704-二分法
数组为有序数组,同时还强调数组中无重复元素,就可以考虑二分法。
需要注意判断区间的选择,选用前闭后闭区间进行判断时left == right是有意义的
class Solution {
public static int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right){
//防止溢出
int middle = left + (right-left) / 2;
if ((nums[middle] < target) ){
left = middle + 1;
} else if ((nums[middle] > target)) {
right = middle - 1;
}else if (nums[middle] == target){
return middle;
}
}
return -1;
}
}
27- 移除数组元素
数组的元素是不能删的,只能覆盖。
考虑快慢指针,在一个for循环内完成两个for循环的工作,快指针完成新数组元素的选择,旧指针指向要更新的下标,最后返回旧数组的长度。
public int removeElement(int[] nums, int val){
int i = 0, j = 0;
int len = nums.length;
for (;j<len ; j++){
if (nums[j] == val){
continue;
}
nums[i] = nums[j];
i++;
}
return i;
}