文章目录
- 1.搜索插入位置No.35
- 2.搜索二维矩阵No.74
- 3.在排序数组中查找元素的第一个和最后一个位置No.34
- 4.搜索旋转排序数组No.33
- 5.寻找旋转排序数组中的最小值No.153
1.搜索插入位置No.35

class Solution {public int searchInsert(int[] nums, int target) {int l = 0;int r = nums.length-1;while(l<=r){int mid = (l+r)>>1;if(nums[mid]==target){return mid;}else if(nums[mid]<target){l = mid+1;}else{r = mid-1;}}return l;}
}
2.搜索二维矩阵No.74


public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;for(int i = 0;i < m;i++){for (int j = 0;j < n;j++){if(matrix[i][j]==target){return true;}}}return false;}
class Solution {public boolean searchMatrix(int[][] matrix, int target) {int m = matrix.length;int n = matrix[0].length;int left = 0;int right = m * n - 1;while (left <= right) {int mid = left + (right - left) / 2;int row = mid / n;int col = mid % n;int midVal = matrix[row][col];if (midVal == target) {return true; } else if (midVal < target) {left = mid + 1; } else {right = mid - 1; }}return false; }
}
3.在排序数组中查找元素的第一个和最后一个位置No.34

public int[] searchRange(int[] nums, int target) {int[] res = new int[2];res[0] = -1; res[1] = -1; int l = 0;int r = nums.length - 1;while (l <= r) {int mid = (l + r + 1) >> 1;if (nums[mid] == target) {res[0] = mid;r = mid-1; } else if (nums[mid] < target) {l = mid + 1;} else {r = mid - 1;}}l = 0;r = nums.length - 1;while (l <= r) {int mid = (l + r) >> 1;if (nums[mid] == target) {res[1] = mid;l = mid+1; } else if (nums[mid] > target) {r = mid - 1;} else {l = mid + 1;}}return res;}
public int[] searchRange(int[] nums, int target) {int l = 0;int r = nums.length - 1;int[] res = new int[2];res[0] = -1;res[1] = -1;if (nums.length == 0 || nums == null)return res;while (l < r) {int mid = (l + r ) >> 1;if (nums[mid] >= target) {r = mid;} else {l = mid + 1;}}if (nums[l] != target) {return res;} else {res[0] = l;}l = 0;r = nums.length - 1;while (l < r) {int mid = (l + r + 1) >> 1;if (nums[mid] <= target) {l = mid;} else {r = mid - 1;}}res[1] = l;return res;}
4.搜索旋转排序数组No.33

public int search(int[] nums, int target) {for(int i = 0;i<nums.length;i++){if(nums[i]==target){return i;}}return -1;}
public int search(int[] nums, int target) {int l = 0;int r = nums.length-1;while(l<=r){int mid = (l+r)>>1;if(nums[mid]==target){return mid;}if(nums[l]<=nums[mid]){if(nums[l]<=target&&target<=nums[mid]){r = mid-1;}else{l = mid +1;}}else{if(nums[mid]<=target&&target<=nums[r]){l = mid+1;}else{r = mid - 1;}}}return -1;}
5.寻找旋转排序数组中的最小值No.153

public int findMin(int[] nums) {int l = 0;int r = nums.length-1;while(l<r){int mid = (l+r)>>1;if(nums[mid]>=nums[r]){l = mid+1;}else{r = mid;}}return nums[r];}