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


import javax.naming.ldap.StartTlsRequest;
import java.util.Arrays;

/**
<p>给定一个按照升序排列的整数数组 <code>nums</code>,和一个目标值 <code>target</code>。找出给定目标值在数组中的开始位置和结束位置。</p>

<p>如果数组中不存在目标值 <code>target</code>,返回 <code>[-1, -1]</code>。</p>

<p><strong>进阶:</strong></p>

<ul>
	<li>你可以设计并实现时间复杂度为 <code>O(log n)</code> 的算法解决此问题吗?</li>
</ul>

<p> </p>

<p><strong>示例 1:</strong></p>

<pre>
<strong>输入:</strong>nums = [<code>5,7,7,8,8,10]</code>, target = 8
<strong>输出:</strong>[3,4]</pre>

<p><strong>示例 2:</strong></p>

<pre>
<strong>输入:</strong>nums = [<code>5,7,7,8,8,10]</code>, target = 6
<strong>输出:</strong>[-1,-1]</pre>

<p><strong>示例 3:</strong></p>

<pre>
<strong>输入:</strong>nums = [], target = 0
<strong>输出:</strong>[-1,-1]</pre>

<p> </p>

<p><strong>提示:</strong></p>

<ul>
	<li><code>0 <= nums.length <= 10<sup>5</sup></code></li>
	<li><code>-10<sup>9</sup> <= nums[i] <= 10<sup>9</sup></code></li>
	<li><code>nums</code> 是一个非递减数组</li>
	<li><code>-10<sup>9</sup> <= target <= 10<sup>9</sup></code></li>
</ul>
<div><div>Related Topics</div><div><li>数组</li><li>二分查找</li></div></div><br><div><li>👍 1571</li><li>👎 0</li></div>
*/

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int[] searchRange(int[] nums, int target) {
		int left = 0 ;
		int right = nums.length-1;
		while (left<=right){
			int mid  = left + (right-left)/2;
			if(nums[mid]==target){
				System.out.println("找到了目标数据,位置 "+mid+target);

				int currRight = mid;
				while (currRight<=right && nums[currRight]==target){
					currRight++;
					System.out.println("currRight"+currRight+"target"+target);
				}
				int currLeft = mid;
				while (currLeft>=left && nums[currLeft]==target){
					currLeft--;
					System.out.println("currLeft"+currLeft+"target"+target);
				}
				int[] res  = new int[2];
				res[0] = currLeft+1;
				res[1]= currRight-1;
				System.out.println("0" + res[0]+ "1" +res[1]);
				return  res;
			}else if(nums[mid] <target){
				left = mid+1;
			}else if(nums[mid]>target){
				right = mid-1;
			}
		}
		int[] res=  {-1,-1};
		return res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

posted @ 2022-04-01 11:02  小傻孩丶儿  阅读(33)  评论(0)    收藏  举报