34.在排序数组中查找元素的第一个和最后一个位置(二分查找) 难度:简单
题目描述:
给定一个按照升序排列的整数数组 nums
,和一个目标值 target
。找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
,返回 [-1, -1]
。
进阶:
你可以设计并实现时间复杂度为 O(log n)
的算法解决此问题吗?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
考察的是二分查找:我用双指针做的,二分查找暂时没写。双指针的时间复杂度为 O( n)
我的思路:
首先,如果数组为空,则返回[-1,-1]
。
先从左向右遍历,找到左下标;再从右向左遍历,找到右下标。
技能补充:
新建数组:
int[] n = new int[]{-1,-1};
我的Java代码:
class Solution {
public int[] searchRange(int[] nums, int target) {
int[] n = new int[]{-1,-1};
if (nums.length == 0) {
return n;
}else{
for (int i = 0; i < nums.length; i++) {
if (nums[i] == target) {
n[0] = i;
break;
}else{
n[0] = -1;
}
}
for (int i = nums.length-1; i >=0 ; i--) {
if (nums[i] == target) {
n[1] = i;
break;
}else{
n[1] = -1;
}
}
return n;
}
}
}