给你一个字符数组 letters,该数组按非递减顺序排序,以及一个字符 target。letters 里至少有两个不同的字符。
返回 letters 中大于 target 的最小的字符。如果不存在这样的字符,则返回 letters 的第一个字符。
class Solution {
//找到数组里第一个大于target的位置
public char nextGreatestLetter(char[] letters, char target) {
int left=0;
int right=letters.length-1;
int mid=0;
while (left<=right){
mid=(left+right)/2;
if (letters[mid]<=target){
left=mid+1;
}else{
right=mid-1;
}
}
if (left>=letters.length) return letters[0];
// return left;
return letters[right+1];
}
}
给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。
如果数组中不存在目标值 target,返回 [-1, -1]。
你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。
class Solution {
public int[] searchRange(int[] nums, int target) {
int l=lowBound(nums,target);
//数组里全小于tartget,没有找到8
if (l==nums.length || nums[l]!=target){
return new int[]{-1,-1};
}
return new int[]{l,lowBound(nums,target+1)-1};
}
//找到数组里第一个大于等于target的位置
public int lowBound(int[] nums,int target){
int left=0;
int right=nums.length-1;
int mid=0;
while (left<=right){
mid=(left+right)/2;
if (nums[mid]<target){
left=mid+1;
}else{
right=mid-1;
}
}
// return left;
return right+1;
}
}