个人网站做淘宝客如何备案,微信开发者平台api,安阳市建设安全监督站网站,app下载网站模板目录
题目#xff1a;
题解#xff1a;
方法一#xff1a;
方法二#xff1a; 题目#xff1a;
给你一个按照非递减顺序排列的整数数组 nums#xff0c;和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target
题解
方法一
方法二 题目
给你一个按照非递减顺序排列的整数数组 nums和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1
输入nums [5,7,7,8,8,10], target 8
输出[3,4]
示例 2
输入nums [5,7,7,8,8,10], target 6
输出[-1,-1]
示例 3
输入nums [], target 0
输出[-1,-1] 提示
0 nums.length 105-109 nums[i] 109nums 是一个非递减数组-109 target 109
题解
方法一
直接遍历num数组将数组的元素存进list中然后利用List自带的方法indexOf返回第一次出现target的下标lastIndexOf返回最后一次出现的target的下标。
class Solution {public int[] searchRange(int[] nums, int target) {int[] res new int[2];ListInteger list new ArrayList();for (int num : nums) {list.add(num);}int last list.lastIndexOf(target);int first list.indexOf(target);res[0] first;res[1] last;return res;}
}
这种解法所需的时间比较长 方法二双指针
使用双指针从数组两边开始遍历数组直到两者都找到为止。
class Solution {public int[] searchRange(int[] nums, int target) {int[] res {-1, -1};if (nums.length 1 nums[0] target) {return new int[]{0, 0};}boolean f false;boolean l false;int L 0;int R nums.length - 1;while (!(f l) L nums.length - 1 R 0) {if (nums[L] target !f) {res[0] L;f true;}if (nums[R] target !l) {res[1] R;l true;}L;R--;}return res;}
}