目录
704. 二分查找法
解题思路:前提是有序数组+无重复数据,遵循循环不变量原则,确定数组的区间,左闭右闭、左闭右开,target在middle左区间,则右边界移动;反之左边界移动,相等则middle为target的下标。
Java代码:
class Solution {
public int search(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while (left <= right) {
int middle = left + ((right - left) / 2); //防止int越界,等同于 (left + right) / 2
if (nums[middle] > target) {
right = middle - 1;
} else if (nums[middle] < target) {
left = middle + 1;
} else {
return middle;
}
}
return -1;
}
}
27. 移除元素
解题思路:
双指针,快指针查找不用删除的元素;慢指针:更新数组元素的下标。循环快指针,如果快指针找到val,则slowindex不用更新;反之则更新
Java代码:
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];
}
}
return slowindex; //slowindex最后一步已经+1了
}
}
写在末尾:开始写算法刷题博客的第一天,特此记录,用来激励自己持续输出。路漫漫其修远兮,吾将上下而求索,与君共勉。