大噶好,我是
方圓
無它,唯手熟爾
33. 搜索旋轉排序數組
class Solution {
public int search(int[] nums, int target) {
int left = 0,right = nums.length - 1, mid = 0;
//二分法開求
while(left <= right){
mid = left + (right - left)/2;
//找到這個要求的索引了
if(nums[mid] == target){
return mid;
}
//根據nums[mid]的和nums[left]的關係,來判斷mid是在左邊還是在右邊
if(nums[mid] >= nums[left]){
//在判斷target是在mid的左邊還是mid的右邊兒
if(target >= nums[left] && target < nums[mid]){
right = mid - 1;
}else{
left = mid + 1;
}
}else{
if(target > nums[mid] && target <= nums[right]){
left = mid + 1;
}else{
right = mid - 1;
}
}
}
return -1;
}
}
34. 在排序數組中查找元素的第一個和最後一個位置
class Solution {
public int[] searchRange(int[] nums, int target) {
int left = 0, right = nums.length - 1, mid = 0;
//開始二分查找
while(left <= right){
mid = left + (right - left) / 2;
if(target > nums[mid]){
left = mid + 1;
}else if(target < nums[mid]){
right = mid - 1;
}else{
//找到目標值了!
left = mid;
right = mid;
//向左擴大範圍
while(left -1 >= 0 && nums[left - 1] == target){
left--;
}
//向右擴大範圍
while(right + 1 <= nums.length - 1 && nums[right + 1] == target){
right++;
}
return new int[]{left,right};
}
}
return new int[]{-1,-1};
}
}
練練練!