ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepSeek LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Java实现

DeepSeek    LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置 Java实现 下面是 LeetCode 34 题的 Java 实现使用两次二分查找分别定位目标值的第一个和最后一个位置时间复杂度为 O(log n)。classSolution{publicint[]searchRange(int[]nums,inttarget){intfirstfindFirst(nums,target);// 如果第一个位置不存在说明数组中没有目标值if(first-1){returnnewint[]{-1,-1};}intlastfindLast(nums,target);returnnewint[]{first,last};}// 查找目标值第一次出现的位置privateintfindFirst(int[]nums,inttarget){intleft0,rightnums.length-1;intans-1;while(leftright){intmidleft(right-left)/2;if(nums[mid]target){ansmid;rightmid-1;// 继续向左查找}elseif(nums[mid]target){leftmid1;}else{rightmid-1;}}returnans;}// 查找目标值最后一次出现的位置privateintfindLast(int[]nums,inttarget){intleft0,rightnums.length-1;intans-1;while(leftright){intmidleft(right-left)/2;if(nums[mid]target){ansmid;leftmid1;// 继续向右查找}elseif(nums[mid]target){leftmid1;}else{rightmid-1;}}returnans;}}思路说明· 数组已经按非递减顺序排列因此可以利用二分查找。· findFirst当 nums[mid] target 时记录当前位置并继续在左半部分搜索以找到更靠前的位置。· findLast当 nums[mid] target 时记录当前位置并继续在右半部分搜索以找到更靠后的位置。· 如果 findFirst 返回 -1说明目标值不存在直接返回 [-1, -1]无需再执行 findLast。复杂度分析· 时间复杂度O(log n)两次二分查找。· 空间复杂度O(1)只使用了常数级别的额外空间。
返回列表