继续打卡算法题,今天学习的是LeetCode的第34题在排序数组中查找元素的第一个和最后一个位置,这道题目是道中等题
。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。
分析一波题目
这个题目里的数组是有序的,同时需要查找数字出现的第一个和最后一个位置,我们可以想到使用双指针遍历这个数组,只要依次查找等于目标值的位置,并且更新第一个和最后一个位置即可。
编码解决
class Solution {
public int[] searchRange(int[] nums, int target) {
int start =0;
int end = nums.length -1;
int[] result = {
-1,-1};
int findMin = 0;
int findMax = 0;
while(start <= end) {
//查找并更新第一个位置
if(nums[start] == target && result[0] == -1){
result[0] = start;
findMin =1;
} else {
if(findMin == 0) {
start++;
}
}
//查找并更新最后一个位置
if(nums[end] == target && result[1] == -1) {
result[1] = end;
findMax = 1;
} else {
if(findMax == 0) {
end--;
}
}
//查找完成了,停止查找
if(findMax ==1 && findMin == 1) {
break;
}
}
return result;
}
}
总结
快速查找数组中数字除了二分法,二分法是从中间往两边查找
。
有些场景也可以使用双指针法,双指针法是从两边往中间查找
。