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

总结

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

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

相关推荐
bin915310 分钟前
幻境寻踪:Rokid AR眼镜上的沉浸式解谜冒险游戏开发实战
后端·ar·restful·沉浸式体验·ar游戏开发·rokid眼镜·解谜游戏
8***f39514 分钟前
工作中常用springboot启动后执行的方法
java·spring boot·后端
想唱rap16 分钟前
C++ map和set
linux·运维·服务器·开发语言·c++·算法
Cisyam27 分钟前
openGauss + LangChain Agent实战:从自然语言到SQL的智能数据分析助手
后端
进击的野人30 分钟前
深入理解 Async/Await:现代 JavaScript 异步编程的优雅解决方案
javascript·面试·ecmascript 6
我叫黑大帅32 分钟前
什么叫可迭代对象?为什么要用它?
前端·后端·python
FleetingLore33 分钟前
C C51 | 按键的单击、双击和长按的按键动作检测
后端
v***88561 小时前
Springboot项目:使用MockMvc测试get和post接口(含单个和多个请求参数场景)
java·spring boot·后端
IMPYLH1 小时前
Lua 的 require 函数
java·开发语言·笔记·后端·junit·lua
爱找乐子的李寻欢1 小时前
线上批量导出 1000 个文件触发 OOM?扒开代码看本质,我是这样根治的
后端