LeetCode第34题在排序数组中查找元素的第一个和最后一个位置

简介: 这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。

继续打卡算法题,今天学习的是LeetCode的第34题在排序数组中查找元素的第一个和最后一个位置,这道题目是道中等题。算法题的一些解题思路和技巧真的非常巧妙,每天看一看算法题和解题思路,我相信对我们的编码思维和编码能力有一些提升。

image.png

分析一波题目

这个题目里的数组是有序的,同时需要查找数字出现的第一个和最后一个位置,我们可以想到使用双指针遍历这个数组,只要依次查找等于目标值的位置,并且更新第一个和最后一个位置即可。

image.png

编码解决

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;
    }
}

总结

快速查找数组中数字除了二分法,二分法是从中间往两边查找

有些场景也可以使用双指针法,双指针法是从两边往中间查找

相关文章
|
1月前
【力扣】-- 移除链表元素
【力扣】-- 移除链表元素
34 1
|
1月前
【LeetCode 27】347.前k个高频元素
【LeetCode 27】347.前k个高频元素
32 0
|
1月前
【LeetCode-每日一题】 删除排序数组中的重复项
【LeetCode-每日一题】 删除排序数组中的重复项
19 4
|
1月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
18 0
Leetcode第三十三题(搜索旋转排序数组)
|
1月前
|
算法 C++
Leetcode第53题(最大子数组和)
这篇文章介绍了LeetCode第53题“最大子数组和”的动态规划解法,提供了详细的状态转移方程和C++代码实现,并讨论了其他算法如贪心、分治、改进动态规划和分块累计法。
56 0
|
1月前
|
C++
【LeetCode 12】349.两个数组的交集
【LeetCode 12】349.两个数组的交集
16 0
|
1月前
【LeetCode 06】203.移除链表元素
【LeetCode 06】203.移除链表元素
29 0
|
1月前
【LeetCode-每日一题】移除元素
【LeetCode-每日一题】移除元素
31 0
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2