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

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

分析一波题目

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

编码解决

java 复制代码
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;
    }
}

总结

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

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

相关推荐
AI科技星19 小时前
张祥前统一场论:空间位移条数概念深度解析
数据结构·人工智能·经验分享·算法·计算机视觉
回家路上绕了弯19 小时前
分布式系统重试策略详解:可靠性与资源消耗的平衡艺术
分布式·后端
王中阳Go20 小时前
别再卷 Python 了!Go + 字节 Eino 框架,才是后端人转 AI 的降维打击(附源码)
后端·面试·go
Wuliwuliii20 小时前
闵可夫斯基和、需存储的最小状态集
c++·算法·动态规划·闵可夫斯基和
superman超哥20 小时前
Rust 表达式与语句的区别:函数式思维与控制流设计
开发语言·后端·rust·rust表达式·rust语句·函数式思维·控制流设计
fliter20 小时前
常见的链上攻击向量
后端
CoovallyAIHub20 小时前
颠覆认知!遥感船舶检测“越深越好”是误区?LiM-YOLO证明“少即是多”
深度学习·算法·计算机视觉
caesar_lion20 小时前
C++ 多线程陷阱:分离线程(detached thread)访问已析构对象的致命隐患
后端
Macbethad20 小时前
SpringMVC RESTful API开发技术报告
java·spring boot·后端
byzh_rc20 小时前
[算法设计与分析-从入门到入土] 贪心算法
算法·动态规划