704. 二分查找
思路:采用二分查找,注意确定查找的区间,可以是[left, right]
,也可以是[left, right)
,两种区间对于边界的操作有所不同。本次确定的区间为[left, right]
时间复杂度:O(logn)
class Solution {
public int search(int[] nums, int target) {
int l = 0, r = nums.length - 1;
while(l < r) {
int mid = (l + r) >> 1;
if(nums[mid] < target) l = mid + 1;
else r = mid;
}
if(nums[l] == target)
return l;
else return -1;
}
}
27.移除元素
思路:采用相向双指针法,两个指针从数组两端往中间走,遇到要移除的元素直接放到数组最后面。也可以使用快慢指针法,快指针一直走到数据结束,只有当快指针元素不是要删除元素时,快指针元素赋给慢指针元素,并且慢指针往前走一个。
注意:相向双指针法改变数组中元素顺序,快慢指针法不改变数组中元素顺序。
快慢指针法
时间复杂度:O(n)
class Solution {
public int removeElement(int[] nums, int val) {
int j = 0;
for(int i = 0; i < nums.length; i ++) {
if(nums[i] != val) nums[j ++] = nums[i];
}
return j;
}
}