704.二分查找(简单 标准二分查找)
思路
找“目标值”的题目,因为刷的题也就50很少,所以直接联想到二分查找,套二分查找模板。
模板
- 先定义好low, high
- while(low<= high开始寻找)
- 算出mid = (low+high)/2
- 先处理命中情况,中位数=目标值 mid = target
- 再处理左右半部查找情况
参考来源:王争数据结构
代码
class Solution {
public int search(int[] nums, int target) {
int low = 0;
int high = nums.length - 1;
//等于的用意在于当只有一位时,low 要等于high
while (low <= high) {
int mid = (low + high) / 2;
//先处理命中情况,中位数=目标值 mid = target
if (nums[mid] == target) {
return mid;
//左半边情况
} else if (nums[mid] < target) {
low = mid + 1;
//右半边情况
} else {
high = mid - 1;
}
}
return -1;
}
}
27. 移除元素
思路
双指针法替代两个for循环,重点是要删除给定元素,两个快慢指针一起移动,当快指针等于给定元素时,只有快指针往前一步,慢指针指向的数替换成快指针,这样才能删除原本快指针想删除的数。
代码
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;
}
}