思路:
二分法查找,找到目标值的第一个位,然后再找第二位
思路很简单但是细节很多
代码:
class Solution {
public static int findIndex(int[] nums, int target, boolean left) {
int leftIndex = 0;
int rightIndex = nums.length;
while (leftIndex < rightIndex) {
int mid = (leftIndex + rightIndex) / 2;
if (nums[mid] > target || left && (target == nums[mid])) {//left为真确定做下标,为假确定有下表、标志
rightIndex = mid;
} else {
leftIndex = mid + 1;
}
}
return leftIndex;
}
public static int[] searchRange(int[] nums, int target) {
int retRange[] = {-1, -1};
if (nums.length == 0 || nums == null) {
return retRange;
}
int left = findIndex(nums, target, true);//查询做下表
if (left == nums.length || nums[left] != target) {//查询结束发现不是target
return retRange;
}
retRange[0] = left;
retRange[1] = findIndex(nums, target, false) - 1;
return retRange;
}
}
其实我想将数组转为字符串,然后用字符串的indexOf进行查找,但是数组中的 多位数会导致出错,比如找“0”,但是数组中有“10”,那么就会出错
我的代码如下:
public class Solution {
public static int[] searchRange(int[] nums, int target) {
int left = 0;
int right = 0;
StringBuilder sb = new StringBuilder();
for (int x : nums) {
sb.append(x);
}
sb.toString();
String stringTarget = String.valueOf(target);
left = sb.indexOf(stringTarget);
right = sb.lastIndexOf(stringTarget);
return new int[] {left, right};
}
public static void main(String[] args) {
int[] a = {0,0,0,0,1,2,3,3,4,5,6,6,7,8,8,8,9,9,10,10,11,11};
searchRange(a, 0);
}
}
不知道各位有没有什么招能使这个行得通