-
给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。
-
例 :
输入:nums = [5,7,7,8,8,10], target = 8
输出:[3,4] -
输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]
public class LC34_FindElement { public static void main(String[] args) { int[] array = {1,2,5,5,9,21}; int[] ints = FindElement(array, 1); int[] ints1 = FindElement_plus(array, 1); System.out.println("["+ints[0] + "," + ints[1] + "]"); System.out.println("["+ints1[0] + "," + ints1[1] + "]"); } private static int[] FindElement(int[] nums, int target) { //定义一个结果集存储开始和结束下标 int[] result = {-1,-1}; //定义一个右指针 int left = 0; int right = nums.length-1; for (; left < nums.length; left++) { if (nums[left] == target) { result[0] = left; for (; left <= right ; right--) { if (nums[right] == target) { result[1] = right; return result; } } } } return result; }
private static int[] FindElement_plus(int[] nums, int target) { //定义一个结果集 int[] result = {-1,-1}; //true代表寻找左边界,false代表寻找右边界 result[0] = binarySearch(nums,target,true); result[1] = binarySearch(nums,target,false); return result; } private static int binarySearch(int[] nums, int target, boolean b) { int res = -1; //定义一个左指针 int left = 0; //定义一个右指针 int right = nums.length-1; while (left <= right) { //定义一个中间指针 int mid = (left + right) / 2; if (nums[mid] > target) { right = mid -1; } else if ( nums[mid] < target ) { left = mid + 1; } else if ( nums[mid] == target ) { res = mid; if (b) { //寻找左边界,right = mid-1 将整个寻找的区域向左移动 right = right - 1; } else { //寻找右边界,left = mid+1 将整个寻找的区域向右移动 left = left + 1; } } } return res; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)